2012-10-15 31 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語句不會編譯。

話雖如此,雖然題目問題的答案是肯定的,如其他答案所示,但真正的答案是:不是你想要做到這一點。