4

我可以在开关/机箱内使用 for 循环吗?

示例代码:

String[,] drinks = new String[,] { { "Cola", "20" }, { "Fanta", "20" }, { "Sprite", "20" }, { "Tuborg", "25" }, { "Carlsberg", "25" } };


switch (menuChoice)
{
  case 0:
    Console.WriteLine("Goodbye!");
    Thread.Sleep(500);
    Environment.Exit(0);
    break;
    for (int i = 0; i < drinksCount; i++)
    {
      case i+1:
      buyDrink(drinks[i,0];
      break;
    }

(更多代码和方法介于这些之间)

基本上,我用这台机器销售的饮料创建了一个数组,然后我想创建一个菜单来选择这些饮料,还可以在 GUI 中添加更多饮料。

这甚至可能吗?

4

5 回答 5

4

您可以在 switch 语句中使用循环,但不能按照您当前使用的方式。尝试用以下代码替换您的代码:

if (menuChoice == 0)
{
    Console.WriteLine("Goodbye!");
    Thread.Sleep(500);
    Environment.Exit(0); 
}
else if (menuChoice > 0 && menuChoice < drinksCount)
{         
    buyDrink(drinks[menuChoice, 0]);
}

添加:

根据宝贵的意见,你为什么不直接使用 -1 作为退出的 menuChoice,这样:

if (menuChoice == -1)
{
    Console.WriteLine("Goodbye!");
    Thread.Sleep(500);
    Environment.Exit(0);
}
else if (menuChoice > 0 && menuChoice <= drinksCount)
{
    buyDrink(drinks[menuChoice - 1, 0], Convert.ToDouble(drinks[menuChoice - 1, 1]));
}

这样您就可以调用静态方法,如下所示:

static void buyDrink(String drink, double drinkPrice)
于 2012-10-15T18:38:09.863 回答
3

这个问题的一个更好的标题可能是:是否有可能有可变的案例陈述?

  case i+1:

这是一个无效的案例陈述。A case 语句的值必须是常数。如果i在这种情况下是一个常数,那么它是被允许的。但是,i不是,因此 case 语句不会编译。

话虽如此,尽管标题问题的答案是肯定的,但正如其他答案所示,这里真正的答案是:不是您尝试这样做的方式。

于 2012-10-15T18:55:46.563 回答
2

中断后有代码是没有意义的。

你从案件中解脱出来,你期望它如何执行?

case 0:
  {   
    break;//If you break here, it exits the block.. your loop never executes
    for (int i = 0; i < drinksCount; i++)
    {
      case i+1:
      buyDrink(drinks[i,0];
      break;
    }
   }

即使有可能,我也看不到重点。只要它大于0,你就会执行这个案例,对吗?那么为什么不直接使用if statement, 帮助自己和他人呢?

if(menuChoice ==0)
{ 
   //dosomething
}
else if(menuChoice >0)
{
  //buy drink
}
于 2012-10-15T18:36:28.610 回答
2
if(menuChoice == 0) {
    Console.WriteLine("Goodbye!");
    Thread.Sleep(500);
    Environment.Exit(0);
} else if(menuChoice > 0 && menuChoice <= drinksCount) {
    buyDrink(drinks[menuChoice - 1, 0]);
}
于 2012-10-15T18:39:48.837 回答
1

该代码根本无法工作。
中断是案例的最终(也是必需的)陈述。
看看你的例子,你可以简单地写

if(menuChoice == 0)
{
    Console.WriteLine("Goodbye!"); 
    Thread.Sleep(500); 
    Environment.Exit(0); 
}
else
{
    buyDrink(drinks[menuChoice-1,0]); 
}

编辑:看到您对 buyDrink 作为静态方法和所需参数的评论,那么您应该更改对 buyDrink 的调用,在定义 buyDrink 方法的类名之前添加价格参数(作为双值)

.......
else
{
    BeverageClass.buyDrink(drinks[menuChoice-1,0], Convert.ToDouble(drinks[menuChoice-1,1])); 
}
于 2012-10-15T18:40:34.920 回答