2014-10-18 2 views
2

나는 상태가 참일 때 루프가 계속 실행된다는 것을 알고 있습니다. 나는 단순히 loop = false로 타이핑 한 후 루프를위한} 괄호 뒤에 코딩을 계속할 수 있다고 생각했다. 분명히 내가 틀렸어. 아무 것도하지 않을거야. 누군가는이 반복문에서 빠져 나오는 법을 보여주십시오.이 괴물 같은 루프를 벗어나는 방법

System.out.println("You total balance is 0.00, " 
       + "please deposit coins and type done when finished"); 

     while(loop){ 
      if (input.hasNextInt()){ 
       deposit = input.nextBigDecimal();} 
       String change = input.next(); 

     switch (change){ 

     case "quarter": 
      balance= quarter.multiply(deposit); 
      total=total.add(balance); 
      System.out.println("Your balance is "+ total +" :Make addiontal deposit(s)"); 
      break; 

     case "dime": 
      balance=dime.multiply(deposit); 
      total=total.add(balance); 
      System.out.println("Your balance is "+ total +" :Make addiontal deposit(s)"); 
      break; 
     case "nickel": 
      balance=nickel.multiply(deposit); 
      total=total.add(balance); 
      System.out.println("Your balance is "+ total +" :Make addiontal deposit(s)"); 
      break; 
     case "penny": 
      balance=penny.multiply(deposit); 
      total=total.add(balance); 
      System.out.println("Your balance is "+ total +" :Make addiontal deposit(s)"); 
      break; 
     case"done": 
      System.out.println("Your total is $"+total); 
      fee=total.multiply(feeRate); 
      System.out.println("The exchance fee is 9.1% which amounts to $"+fee); 
      grandTotal=total.subtract(fee); 
      System.out.println("Your total balance minus the exchange fee is $"+grandTotal); 

      break; 

     default: System.out.println("There is a issue at "+change);} 

      } System.out.println("4"); 

     } 

} 
+0

, 실행은 중단 상태까지 루프에 남아 충족되었습니다. 루프 변수 **는 루프 내에서 ** 반드시 ** 루프 이후에 ** 설정해야합니다. – pasty

답변

5

키가 루프 변수를 변경하여 false가되어 while 루프를 종료해야합니다. 따라서 case "done" 블록에서 루프 변수를 변경하십시오. 그 블록에서 loop = false;

case"done": 
     System.out.println("Your total is $"+total); 
     fee=total.multiply(feeRate); 
     System.out.println("The exchance fee is 9.1% which amounts to $"+fee); 
     grandTotal=total.subtract(fee); 
     System.out.println("Your total balance minus the exchange fee is $"+grandTotal); 

     loop = false; // ************ add this ************ 

     break; 

키 개념은 루프의 원인이되는 것은 루프 자체 내에서 어떻게 든 변경해야 계속한다는 것을 명심 설정합니다. 그렇지 않으면 while 루프가 끝나지 않습니다.

+1

@pasty : 아이구, chit! 감사!!!!!!!!!!!!! –

1

루프 변수가 false로 설정 될 때까지 루프가 계속 진행됩니다. "done"의 경우, false로 설정하면됩니다. 그렇게하면 다시 돌아 가지 않습니다.

 case"done": 
      System.out.println("Your total is $"+total); 
      fee=total.multiply(feeRate); 
      System.out.println("The exchance fee is 9.1% which amounts to $"+fee); 
      grandTotal=total.subtract(fee); 
      System.out.println("Your total balance minus the exchange fee is $"+grandTotal); 
      loop = false; // This is the line to add. 
      break; 
+2

설명을 찾아야하는 코드를 덤프하지 마십시오. 당신이 한 일을 보여주고 왜 그렇게했는지 설명합니다.1을 바꾸는 것만으로 50 줄을 복사 할 필요가 없습니다. –

+1

그러나 이것은 정답을 투표하기위한 설득력있는 이유는 아니며, 설명을 해설해야합니다. 너처럼. –

+0

이제 설명을 추가했습니다. 또한 코드에 주석이 있습니다. 명확해야합니다. 5 투표, 잘 된 커뮤니티 :). "도와 줘서 고맙다."환영받을 것입니다, 당신이 말하는 것은 "벗겨지기"입니다. 한 사람에게 개선하는 방법을 알려 주셔서 감사합니다. 개선되었습니다. 아래로 투표 할 필요가 없습니다. – ThePerson

3

루프를 끊는 세 가지 방법.

A)는 false에 플래그 변수를 설정 : 당신은 이미이 변수를 가지고 있기 때문에

loop = false; 

, 이것은 훨씬 더 좋은 (간단) 접근 방법이다.

B) 레이블이있는 구분을 사용하십시오.

label: while(true) { 
    // ... 
    switch(something) { 
    break label; // Without a label, it would only leave the switch! 
    } 
} 

본질적으로 "goto"이기 때문에 어떤 사람들은이 마지막 해결책을 싫어할 것입니다.

C) 더 많은 모듈 코드를 사용하십시오.

많은 경우에 훨씬 더 깨끗한 방법은 방법을 사용하는 것입니다. 그런 다음 "break"를 사용하여 내부 루프 또는 스위치를 종료하고 return을 사용하여 실제로 하위 프로 시저를 종료하고 결과를 반환 할 수 있습니다.

이렇게하면 코드가 이해하기 쉬우 며 return의 의미는 종종 break의 의미보다 훨씬 적합합니다.

+1

[aaah goto ... : -)] (http://xkcd.com/292/). – pasty

+0

코딩에서'labels'을 사용하는 것이 바람직하지 않습니다. 코드가 불분명 해집니다. –

+0

하지만 Anony 크레딧을주기 위해 그는 아래쪽을 언급합니다. 대답은 당연한 것입니다. 1 + –

1

while 루프 내의 변수 loop의 값을 false으로 변경해야합니다.

사용자 입력이 done 인 경우에 맞춰야한다고 생각합니다. 따라서이 경우에는 다음 줄을 추가하십시오 case "done": 블록에 어디

loop = false; 

이유는 한 번 루프 ... 루프라고한다
관련 문제