[英]Understanding do-while loop
我正在進行oracle認證的Java SE7程序員聯合實踐考試(書中),並且遇到了一個問題,即使有了解釋,我也不明白答案。 這是說明和代碼:
它將打印3.循環體執行兩次,程序將打印3。
我不了解循環主體如何執行兩次,也許我不了解b=!b
含義。 有人可以解釋一下嗎?
class TestClass {
public static void main(String args[]){
boolean b = false;
int i = 1;
do{
i + + ;
} while (b = !b);
System.out.println(i);
}
}
b = !b
是一個將b的倒數賦給自己的賦值 (有效地在true和false之間翻轉)
在java中,賦值返回已賦值的內容(因此a=b=1
是可能的)
因此, while (b=!b)
將翻轉while (b=!b)
的值,然后檢查b的值。
b=!b
永遠都是真的,為什么? 因為,您要做的是將相反的值(T-> F,F-> T)插入到“ b”中,並且while (b = !b);
時沒有問題while (b = !b);
將返回TRUE ....
所以在你的情況下while (b = !b);
永遠都會回歸真實
迭代1
boolean b = false;
int i = 1;
do{
i++ ; // i = 2
} while (b = !b); // b = !false = true so one more execution
迭代2
do{
i++ ; // i = 3
} while (b = !b); // b = !true = false so loop breaks
這樣它將打印3
。 簡單:)
實際上,混淆在於=
符號。 =
被分配操作,其中作為==
是條件運算符。 第一個將分配值,而稍后將檢查條件。 你可以玩它,並有一些其他的結果,如
int a = 6;
int b = 10;
System.out.println(a = b);
System.out.println(a == b);
你會明白的。
在第一次迭代結束時,由於增量運算符,變量i
將為2
。 表達式b=!b
將結果為true
( b = !false
),並將變量b
也設置為true
。 這樣循環將再次執行。
在第二次迭代結束時,變量i
現在為3
。 表達式b=!b
結果為false
( b = !true
),這也是變量b
的值。 因此整個do-while循環終止, println()
語句顯示3
。
請記住: =
(賦值運算符)與==
(相等性檢查)不同。
條件
b = !b;
使用賦值運算符,該運算符返回已分配的值。
最初, b
為假,因此將true
賦給b
,並用於條件。 因此while循環將第二次執行。 在該執行中, b
為真,因此將false
分配給b
並用於循環條件。 因此,循環退出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.