簡體   English   中英

理解do-while循環

[英]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將結果為trueb = !false ),並將變量b也設置為true 這樣循環將再次執行。

在第二次迭代結束時,變量i現在為3 表達式b=!b結果為falseb = !true ),這也是變量b的值。 因此整個do-while循環終止, println()語句顯示3

請記住: = (賦值運算符)與== (相等性檢查)不同。

條件

b = !b;

使用賦值運算符,該運算符返回已分配的值。

最初, b為假,因此將true賦給b ,並用於條件。 因此while循環將第二次執行。 在該執行中, b為真,因此將false分配給b並用於循環條件。 因此,循環退出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM