2012-10-15 4 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

SO에 숙제 질문을하는 것이 적절합니다. 제 제안을 오해하지 마십시오.이 질문이 '숙제'라고 태그해야합니다. – 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]을 결코 치지 않습니다. 0 개의 인덱스가있는 배열은 "drinks [menuChoice, 0]"이 될 수 있습니다 "drink [menuChoice - 1, 0]"then then 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 호크 눈 여기 ... – Steve

1

코드가 전혀 작동하지 않을 수 있습니다.
중단은 사례의 마지막 (및 필수) 진술입니다.
당신은 단순히 쓸 수 귀하의 예를 보면

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

편집 : 정적 방법으로 buyDrink에 대한 코멘트 다음은 buyDrink 메소드가 정의 된 클래스 이름을 붙이는 buyDrink에 대한 호출을 변경해야합니다 필요한 매개 변수를보고하고 가격에 대한 매개 변수를 double 값으로 입력하십시오.

....... 
else 
{ 
    BeverageClass.buyDrink(drinks[menuChoice-1,0], Convert.ToDouble(drinks[menuChoice-1,1])); 
} 
+0

drink [0, 0], 배열은 제로입니다. 당신이 필요 menuChoice - 1 –

+0

아 맞아, 수정. 이봐 요, 또한 최고의 upvoted 대답은 같은 문제가 .... ....-) – Steve

3

더 나은 제목은 다음과 같습니다. 변수 case 문을 사용할 수 있습니까?

case i+1: 

이것은 잘못된 내용입니다. case 문의 값은 상수 여야합니다. 이 경우에 i이 상수이면 허용됩니다. 그러나 i이 아니므로 case 문은 컴파일되지 않습니다.

제목 질문에 대한 답변이 예이지만 기타 대답에 표시된 것처럼 실제 답변은 다음과 같습니다. 사용자가 시도하는 방식이 아닙니다.