2011-04-29 85 views
0

以下代碼聲稱使用具有標誌的do循環重複輸入,直到獲得有效的int。關於此Java代碼段的問題

do 
{  
    try 
    { 
    // attempt to convert the String to an int 
    n = Integer.parseInt(s); 
    goodInput = true; 
    } 
    catch (NumberFormatException nfe) 
    { 
    s = JOptionPane.showInputDialog(null, 
      s + " is not an integer. Enter an integer"); 
    } 
} while (!goodInput); 

我對這裏的邏輯有點困惑。如果剛剛的Integer.parseInt正常工作,或沒有異常的現象發生,那麼「goodInput」被指定爲「true」在

goodInput = true; 

線接!goodInput將被評估爲假,因此而循環將繼續。這在我看來與設計邏輯矛盾,即在執行正確的解析操作後while循環應該停止。我上面的分析有什麼問題。

回答

5

do { } while(x);環路,而x == true,即直到x == false

因此,do { } while(!x);循環而x == false,即直到xtrue

0

如果它解析正確,goodInput爲true,這將使!goodInput爲false,因此循環將結束。

1

do/while循環的行爲與正常的while循環完全相同,但保證至少運行一次。用這些術語來思考它是最好的。

0

當條件(在本例中爲!goodInput)計算結果爲false時,do-while將停止循環。只要它是真的,它就會繼續循環。

3

然後!goodInput將被評估爲False,所以while循環會再次繼續。

否 - 當表達式計算結果爲false時,循環停止。

試着像普通英語一樣閱讀:「do(stuff)while(expression)is true」。

0

對你的所有分析都是正確的。正如你所說,只有當while statement evaluationfalse時,它纔會再次循環。

0

!goodInput必須是false來終止循環。如果goodInput爲真,則!goodInput爲假,因此循環終止。