2012-10-15 27 views
2

我可以在开关/外壳内使用for循环吗?在开关/外壳内使用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中添加更多饮料的能力。

这甚至可能吗?

+1

这样就可以问作业问题了 - 请不要误解我的建议:如果是这样,你应该把这个问题标记为“家庭作业”。 – payo

+2

没有作业标签。不要试图标记为功课。 –

+1

为一个,你需要指定'案例'为中断后的代码。目前,没有人指示运行该代码(事实上,除非你这样做才会编译)。 – payo

回答

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) 
+0

你的代码永远不会打酒[0,0]。数组是零索引“饮料[menuChoice,0]”可以是“饮料[menuChoice - 1,0]”,然后更正if else条件“menuChoice

+0

这使我走上了正确的道路。但是,我的buyDrink看起来像这样:'static void buyDrink(String drink,double drinkPrice) '并且它不会接受放入它的数组内容。怎么修? –

+0

@LastCoder,是的,你是绝对正确的。我现在编辑它。 –

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

+1 Hawk眼睛在这里... – Steve

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])); 
} 
+0

饮料[0,0],数组是零索引。你需要menuChoice - 1 –

+0

哦,是的,纠正。嘿,也是最好的upvoted答案有同样的问题.... :-) – Steve

3

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

case i+1: 

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

话虽如此,虽然题目问题的答案是肯定的,如其他答案所示,但真正的答案是:不是你想要做到这一点。