2015-06-11 302 views
-2

我知道在while循環中,do循環首先迭代,然後檢查條件。但爲什麼這個代碼打印3,不應該進入無限循環?但是,如果我用true替換b =!b。它確實進入無限循環。這是爲什麼? (我是一個新手,所以我可能失去了一些東西啞)Java Do while循環

public static void main(String[] args) { 
    boolean b = false; 
    int i = 1; 
    do{ 
     i++ ; 
    } while (b = !b);   //shouldn't this loops forever, if i put true, it does loop for ever why? 
    System.out.println(i); //prints 3 
} 

回答

8

您正在使用賦值運算符=,而不是比較操作==

在第一次迭代中,i++發生並且i現在是2。您將!btrue指定爲b,並且這是while循環條件。條件滿足,所以下一次迭代發生。

在第二次迭代中,i++發生並且i現在是3。您將!bfalse指定爲b,這就是while循環條件。條件不滿足,所以do-while循環結束,並打印3

如果你說while (b == b);,那麼這將是一個無限循環。 while (b != b);會在第一次迭代之後爆發,打印2

+0

while(b ==!b)將跳出循環。而(b!=!b)將導致無限循環。 – codedabbler

+0

@ddalton這就是我沒有測試時發生的事情!固定。 – rgettman

+0

哦好的!所以在第二次迭代中,!b變回false ......好酷,這就是我錯過了,!(不) –

1

第一次計算b =!b時,b將被設置爲true並且結果表達式爲真,因此循環將再次運行。

在第二次遇到表達式計算結果爲false,所以循環退出。

那麼,我會增加兩次。所以最終的值是3.