2015-01-20 4 views
1

Java 프로그램에서 while 루프를 사용하면 부울 유형을 사용하여 종료 할 때 작동하지 않는 것으로 나타났습니다. 나는 그것을 테스트하기 위해 간단한 것을 타이핑했다. 코드는 i = 9를 통해 완료되고 테스트는 false로 출력됩니다.왜 while 루프가 종료되지 않습니까?

public class LoopTesting { 


    public static void main(String[] args) { 

     boolean test = true; 

     while(test) { 
      for (int i = 1; i < 10; i++) { 
       System.out.println(i); 
       if(i == 5) test = false; 
      } 
     } 
     System.out.println(test); 
    } 
} 

편집 : 이것은 당신이

while(test) { 
     for (int i = 1; i < 10; i++) { 
      System.out.println(i); 
      if(i == 5) { 
      test = false; 
      break; 
      } 
     } 
    } 

이상을 원하는 것입니다

while(test) { 
     for (int i = 1; i < 10; i++) { 
      System.out.println(i); 

     } 

     test = false; 

     for(int i = 11; i < 20; i++) { 
      System.out.println(i); 
     } 
    } 

그리고 19

+2

그 사실 제대로 .. 9 인쇄 및 루프가 종료 동안 – vlatkozelka

+1

예상 정확히 무엇을 "테스트", 작업, 그것은 'FALSE'를 인쇄 이유입니다. – eckes

+1

@alfasin 단일 스레드 (주 스레드) 예제의 경우 동기화 또는 동시 처리 문제와 최적화가 필요하지 않습니다. – eckes

답변

6

루프 내에서 test 값을 변경했습니다. for 루프의 조건은 이 아니라 i < 10입니다.
그래서 for 루프가 끝날 때까지 반복됩니다.
그런 다음 제어가 for 루프 안에있을 때 testfalse으로 설정 한 상태에서 종료됩니다.

4

에 인쇄 : 응답에서의 나는이 코드를 테스트 대답 afzalex하기 단순히

int i = -1; 

while(test) { 
     i++; 
     System.out.println(i); 
     if(i == 5) { 
      test = false; 
     } 
} 
0

논리에 오류가 있습니다. test 변수는 내부 for 루프가 완료 될 때까지 확인되지 않습니다.

while(test) { 
    for (int i = 1; i < 10; i++) { 
     System.out.println(i); 
     if(i == 5){ 
      test = false; 
      break; 
     } 
    } 
} 

하지만 당신은 아마 이런 일을하고 싶지 : 만 5 번을 반복하려는 경우, 당신은이 작업을 수행 할 수 있습니다 당신이 가지고 있기 때문에

... 
int i = 1; 
while(test) { 
    if(i == 5) 
     test = false 
    else i++; 
} 
1

당신의 while 루프 폐쇄하지에 문제가 코드에 for 루프가 내장되어 있습니다. 그러면 while(test)true이되므로 코드에 while 루프가 입력됩니다. 그런 다음 코드에 for 루프가 입력됩니다. for 루프 안에는 1-10에서 반복되는 코드가 있습니다. 이 루프는 Integeri을 기반으로합니다. 내부 루프는 기본적으로 while(i < 10)을 말합니다. 따라서이 내부 루프는 boolean 테스트 값에 영향을받지 않습니다.

while(test) { // This loop will continue to run until test == false 
     for (int i = 1; i < 10; i++) { // This loop will continue to run until i > 9 
       test = false; // This will execute on the first loop of the inner loop, but it is not checked at the outer loop until the inner loop is complete 
     } 
    } 

희망이 있습니다. 문제는 부울이 바깥 쪽 루프에 해당하고 아무 것도 안쪽 루프가 실행되는 것을 멈추지 않는 것입니다.

0

while/for를 간단한 if/goto로 바꾸면 두 번째 질문 코드가 어떻게 생깁니 까? 어쩌면 이것은 당신을 위해 이해하기 쉽습니다 :

loopA: // while 
if (test) { 
    int i1 = 1; 
    loopB: // for 1 
    if (i1 < 10) { 
    System.out.println(i1); 
    i1++; 
    goto loopB; 
    } 

    test = false; 

    int i2= 11; 
    loopC: // for 2 
    if (i2 < 20) { 
    System.out.println(i2); 
    i2++; 
    goto loopC; 
    } 
    goto loopA; 
} 
System.out.println(test); 
관련 문제