Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在开关/机箱内使用for循环_C#_Multidimensional Array_Switch Statement - Fatal编程技术网

C# 在开关/机箱内使用for循环

C# 在开关/机箱内使用for循环,c#,multidimensional-array,switch-statement,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(50

我可以在开关/机箱内使用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;
    }
String[,]饮料=新字符串[,]{{“可乐”,“20”},{“芬达”,“20”},{“雪碧”,“20”},{“图堡”,“25”},{“嘉士伯”,“25”};
开关(menuChoice)
{
案例0:
控制台。WriteLine(“再见!”);
睡眠(500);
环境。退出(0);
打破
for(int i=0;i
(更多的代码和方法位于这些代码和方法之间)

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


这是可能的吗?

在中断后使用代码是没有意义的

你脱离了这个案子,你希望它怎么执行

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;
    }
   }

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

if (menuChoice == 0)
{
    Console.WriteLine("Goodbye!");
    Thread.Sleep(500);
    Environment.Exit(0); 
}
else if (menuChoice > 0 && menuChoice < drinksCount)
{         
    buyDrink(drinks[menuChoice, 0]);
}
if(menuChoice==0){
控制台。WriteLine(“再见!”);
睡眠(500);
环境。退出(0);

}否则,如果(menuChoice>0&&menuChoice该代码根本无法工作。
中断是案件的最终(也是必需的)陈述。
看看你的例子,你可以简单地写

if(menuChoice == 0)
{
    Console.WriteLine("Goodbye!"); 
    Thread.Sleep(500); 
    Environment.Exit(0); 
}
else
{
    buyDrink(drinks[menuChoice-1,0]); 
}
编辑:将您关于BuyDiffer的评论视为静态方法和所需的参数,然后您应该更改对BuyDiffer的调用,在定义BuyDiffer方法的类名前面加上参数(作为双值)


这个问题的一个更好的标题可能是:是否可能有可变的case语句

  case i+1:
这是无效的case语句。case语句的值必须是常量。如果在这种情况下,
i
是常量,则允许它。但是,
i
不是常量,因此不会编译case语句


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

这样问家庭作业问题是合适的-请不要误解我的建议:如果是这样的话,你应该将这个问题标记为“家庭作业”。没有家庭作业标记。你可以这样做不要尝试将标记为家庭作业。首先,您需要在中断后为代码指定“case”。现在,没有任何指令运行该代码(事实上,除非您这样做,否则不会编译)。@JoelRondeau有一个家庭作业标记,@payo家庭作业标记已过时。请注意,代码将永远不会命中drinks[0,0]。数组是零索引的“drinks”[menuChoice,0]“可以是”饮料[menuChoice-1,0]”然后将if-else条件“menuChoice静态无效BuyDiff(字符串饮料,双饮价格)
而且它不会接受放入其中的数组内容。如何修复?@LastCoder,是的,你完全正确。我现在已经编辑了它。饮料[0,0],数组是零索引的。你需要menuChoice-1oh是的,正确,更正。嘿,最好的投票答案也有同样的问题…-)
static void buyDrink(String drink, double drinkPrice)
if(menuChoice == 0) {
    Console.WriteLine("Goodbye!");
    Thread.Sleep(500);
    Environment.Exit(0);
} else if(menuChoice > 0 && menuChoice <= drinksCount) {
    buyDrink(drinks[menuChoice - 1, 0]);
}
if(menuChoice == 0)
{
    Console.WriteLine("Goodbye!"); 
    Thread.Sleep(500); 
    Environment.Exit(0); 
}
else
{
    buyDrink(drinks[menuChoice-1,0]); 
}
.......
else
{
    BeverageClass.buyDrink(drinks[menuChoice-1,0], Convert.ToDouble(drinks[menuChoice-1,1])); 
}
  case i+1: