2014-03-06 46 views
0

所以我有一個環繞一個循環和一個if語句的循環。但是,在運行程序時,它會從內部循環中退出(按計劃),然後它會失敗if語句(也按計劃執行),並使用簡單打印的else語句。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"); 
    } 
} 

感謝您的幫助,無論!

編輯: 爲了強調...... 發生了什麼: 無限循環噴射「短語2」。 我想要的: 在執行else之後,我想再次進入內部循環。

+1

看起來一旦你打了「phrase2」的情況下,你永遠不更新任何其他數據等的當然,過去是假的條件依然如此。您可能想要在'else'語句中執行某種重新初始化,以便正確重啓。 – dlev

+1

如果你確定''確實總是false,那麼'i'永遠不會從零改變,所以'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

它看起來像你有一些代碼,你可能想運行一次,除非出現問題,然後你想回去重試。我通常使用的成語看起來像

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); 

重要的是,你需要在循環,每次開始時你的標誌(needToRetry)復位。 (PS還有其他的方法可以做到這一點使用breakcontinue,雖然我個人不喜歡使用continue。)