문제

이 코드를 실행할 때 어떤 행동을 기대할 수 있습니까?

do while(testA) {

    // do stuff

} while(testB);

그것은 다음과 같이 행동 할 것인가?

do {
    while(testA) {
        // do stuff
    }    
} while(testB);

또는:

if(testA) {
    do {
        // do stuff
    } while(testA && testB);
}

아니면 완전히 예상치 못한 일이 있습니까?

나는 이것이 매우 모호하다고 생각하기 때문에이 질문을 하고이 주제를 검색하는 다른 사람들에게는이 질문을합니다. ~ 아니다 나는 그것을 테스트하는 것이 게으르다.

도움이 되었습니까?

해결책

첫 번째 블록과 동일합니다.

do {
    while(testA) {
        // do stuff
    }    
} while(testB);

관련 부분 자바 문법 구문 분석 할 때 다음과 같습니다.

DoStatement:
    do Statement while ( Expression ) ;

Statement:
    WhileStatement

WhileStatement:
    while ( Expression ) Statement

Statement:
    Block

Block:
    { BlockStatements_opt }

Java 컴파일러가 이것을 다음과 같이 구문 분석 할 것임을 알 수 있습니다. do <WhileStatement> while ( Expression ) ;. 이것이 당신이 쓴 코드를 구문 분석하는 유일한 유효한 방법입니다.

이 구성을 구문 분석하는 것은 특별한 규칙이 없음을 명심하십시오. 그것은 단지 do-while 루프가 쓰여지는 비정상적인 방법으로 인해 인간이 읽는 것이 혼란스러워집니다. 정상적인 사용에서는 항상 다음과 같이 작성됩니다 do { ... } while 명백한 곱슬 괄호와 함께.

다른 팁

실제로 작동하지만 행동은 테스트하는 조건에 따라 다릅니다. 예 :이 코드 :

  int i = 2;
  int j = 4;
  do while(j > 0) {
       i--; j--;
       System.out.println("i:" + i + " j:" + j);
 } while(i > 0);

출력 :

i:1 j:3
i:0 j:2
i:-1 j:1
i:-2 j:0

그래서 그것은 다음과 같이 작동합니다.

while(j>0) {

}

변수 이름을 교환함으로써 :

do while(i > 0) {
    //.. same as above
 } while(j > 0);

출력은 다음과 같습니다.

i:1 j:3
i:0 j:2

첫 번째 경우와 동일하게 작동하는 것처럼 보입니다 (예 : 첫 번째는 고려됩니다). 응용 프로그램이 종료되지 않습니다!


요약:
언제 testA ~이다 만족하지 않습니다 더 이상 testB 또한 만족하지 않습니다, 코드는 정상처럼 작동합니다 while(testA){} 고리.
하지만: 언제에 testA ~이다 더 이상 만족하지 않습니다, testB 여전히 만족합니다, 루프는입니다 ~ 아니다 더 이상 실행되고 대본이 있습니다 종료되지 않습니다. 이것은 "외부"루프의 상태를 루프 내부에서 변경 해야하는 경우에만 적용됩니다.

업데이트:그리고 다른 대답을 읽은 후, 나는 이것이 중첩 된 사람들의 행동이라는 것을 알고 있습니다. do-while - while 고리.
어쨌든, 교훈 : 혼란 스러울 수 있기 때문에 이런 종류의 구문을 사용하지 마십시오.)

그것은처럼 행동합니다

do {
    while(testA) { 
        // stuff
    }
} while(testB);

따라서 해당 코드 블록은 다음과 같은 방식으로 구문 분석됩니다.

testb는 true 인 동안 {코드 블록}을 수행하십시오. 여기서 {코드 블록}은 내부입니다.

그런 코드를 작성하는 것은 확실히 드문 일입니다 :)

대답은 #1입니다. 그것은 오래 지속될 것입니다 testB 만족 스럽지만 코드를 실행하지 않습니다. testA 만족스럽지 않습니다.

"do {} while();"하나는 하나의 구성입니다."while(){}"또 다른 것입니다.

""와 같은 것은 없습니다.do while"; 당신은 우연히 그들을 중첩하고 {}가 단일 지침의 선택 사항이라는 사실을 활용하고 있습니다.

다시 말해, 이것은 법적 구문입니다.

do System.out.println("Hello World") while (true);

그리고처럼 if-진료소, 블록은 단일 진술로 취급됩니다.

즉, 첫 번째 가능한 대답은 올바른 대답입니다.while(){}"외부 내부의 단일 비 혈장 인 것"do {} while();"

나는이 코드가 합법적이라고 생각하지 않습니다.

do while(testA) {

        // do stuff

    } while(testB);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top