2014-11-12 5 views
0

여기가 - if (code<10 || code>99) 인 것으로 보입니다. 범위를 벗어나는 숫자를 입력하면 루프가 무한히 계속되어 겉으로는 조건을 무시합니다. 나는 System.exit(0)을 시도했지만, while 루프를 사용하여 코드를 멈추고 싶습니다.Java 부울 조건 while 루프는 if 문을 무시합니다?

import java.util.*; 
public class LockPicker { 

    public static void main(String[] args) { 
     Scanner kb = new Scanner(System.in); 
     Random r = new Random(); 
     boolean stop = false; 
     while (!stop) { 
      System.out.print("What is the unlock code? "); 
      int code = kb.nextInt(); 
      if (code<10 || code>99) { 
       System.out.println("Your number must be between 10 and 99"); 
       stop = !stop; 
      } 

      System.out.println("Picking the lock..."); 
      System.out.println(""); 
      int x = -1, counter = 0; 
      while (x!=code) { 
       x = r.nextInt(90)+10; 
       System.out.println(x); 
       counter++; 
      } 
      System.out.println("That took only "+counter+" tries to pick the lock!"); 
      stop = !stop; 
     } 
    } 
} 
+2

if 문이 제대로 실행되고 stop이 true로 설정되었지만 실행이 계속되고 루프 본문의 마지막 문이 stop 값을 반대로 다시 false로 설정합니다. – hatchet

+1

나는 항상 newbie 개발자들이 break 조건에서 사용 된 boolean을 부정하는 것에 문제가 있다는 것을 알고있다. 새로운 개발자에게 나의 제안은 긍정적 인 논리로 사물을 표현하려고 노력하는 것입니다. 예 : 'boolean continueLooping = true; '(continueLooping) {...} while (continueLooping) {...} 또한 토글을 사용하지 않고 값을 명시 적으로 설정합니다 (예 :'continueLooping = false;'). – hfontanez

답변

3

stop 변수가 필요하지 않습니다. breakcontinue을 사용할 수 있습니다.

Random r = new Random(); 
while (true) { 
    System.out.print("What is the unlock code? "); 
    int code = kb.nextInt(); 
    if (code < 10 || code > 99) { 
     System.out.println("Your number must be between 10 and 99"); 
     continue; 
    } 

    System.out.println("Picking the lock..."); 
    System.out.println(""); 
    int x = -1, counter = 0; 
    while (x != code) { 
     x = r.nextInt(90) + 10; 
     System.out.println(x); 
     counter++; 
    } 
    System.out.println("That took only " + counter 
      + " tries to pick the lock!"); 
    break; 
} 

continue 그냥 반복을 생략하고 번호를 다시 사용자에게 메시지를 표시하기 위해 while 루프로 이동합니다. 일치가 발견되면 breakwhile 루프를 종료합니다.

0

숫자가 원하는 범위를 벗어나는 경우 두 번 중지를 전환합니다. 그러면 루프가 영원히 돌아 가게됩니다. stoptrue으로 설정하고 전환하지 않으려 고합니다.

관련 문제