在开关/外壳内部使用for循环

时间:2012-10-15 18:32:35

标签: c# multidimensional-array switch-statement

我可以在交换机/机箱内使用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中添加更多饮料。

这甚至可能吗?

5 个答案:

答案 0 :(得分: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)

答案 1 :(得分:3)

这个问题的更好标题可能是:是否可以使用可变案例陈述?

  case i+1:

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

话虽如此,虽然标题问题的答案是肯定的,但正如其他答案所示,这里真正的答案是:不是你想要的方式。

答案 2 :(得分: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
}

答案 3 :(得分:2)

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

答案 4 :(得分: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])); 
}