我可以在交换机/机箱内使用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中添加更多饮料。
这甚至可能吗?
答案 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]));
}