2014-03-06 2 views
0

그래서 루프와 if 문을 감싸는 루프가 있습니다. 그러나 프로그램을 실행할 때 내부 루프 (계획대로)에서 벗어난 다음 간단한 문장 인 else 문을 사용하여 if 문 (계획대로)에 실패합니다.Java : 무한 루프가 루프 내부에있는 경우

내가 원했던/일어난 일은 원래의 내부 루프 (따라서 외부 루프)로 다시 시작합니다. 그러나 대신 if 문에 실패하면 "phrase2"를 반복해서 반복합니다. 에 관계없이 도움을

int x = 1; 
int y = 1; 
int i = 0; 
while(i == 0) 
{ 
    while(<condition that is false>) 
    { 
     System.out.println("phrase1"); 
     a = input.nextInt(); 
     b = input.nextInt();   
    } 
    if(<condition that is false>) 
    { 
     i = 1; 
    } 
    else 
    { 
     System.out.println("phrase2"); 
    } 
} 

감사 :

여기에 단순화 된 코드입니다!

편집 : 강조 표시를 위해 ... 결과 : 무한 루프에서 "phrase2"를 추출합니다. 내가 원했던 것 : else가 실행 된 후에, 나는 다시 내부 루프 안으로 들어가기를 원했다.

+1

일단 "phrase2"사례를 조회하면 다른 데이터를 업데이트하지 않는 것처럼 보입니다. 물론 거짓이었던 조건들은 그대로 남아 있습니다. 'else' 문에서 어떤 종류의 재 초기화를 수행하여 제대로 재시작 할 수 있습니다. – dlev

+1

'<조건이 false>가 참으로 항상 거짓이면'i'가 0에서 변경되지 않으므로'while (i == 0)'이 무한대로 실행됩니다. 어떻게 든 변화해야합니다. – aliteralmind

+0

조건 자체가 문제 일 수 있습니다. 그들을 추가 할 수 있습니까? – AJMansfield

답변

0

내부 루프에서 어떤 조건을 사용하고 있는지를 확인하십시오.

else 
{ 
    System.out.println("phrase2"); 
    // SET THIS TO TRUE: <condition that is false> 
} 

이렇게하면 내부 루프가 다시 트리거됩니다.

+0

고맙습니다. 이것이 문제였습니다. 많은 감사를드립니다. – anakhronizein

+0

문제 없습니다, @anakhronizein – Coderchu

0

귀하의 제어 입력 결코 아래 if 문

if(<condition that is false>) 
{ 
    i = 1; 
} 

차단할 경우 위에 와서 있도록 조건을 조정해야 할 수도 있습니다. 디버깅 할 if 문 안에 System.out.println을 도입하십시오.

+0

그건 그가 묻는 것이 아니에요. – Coderchu

0

무언가가 잘못되어 다시 돌아가서 다시 시도하려는 경우가 아니라면 한 번 실행하고 싶은 코드가있는 것처럼 보입니다. 중요한 것은 당신이 루프마다의 시작 부분에 깃발 (needToRetry)을 재설정해야한다는 것입니다

boolean needToRetry; 
do { 
    needToRetry = false; 
    // do whatever 
    if (somethingWentWrong) { 
     needToRetry = true; 
     // set this at any point where you find you will need to go back 
    } 
} while (needToRetry); 

처럼 나는 보통 그것을 위해 사용하는 관용구 보인다. (추신 : break 또는 continue을 사용하는 다른 방법이 있습니다. 개인적으로는 continue을 사용하는 것을 싫어합니다.)