Java while和do while迴圈詳解

程式碼女民工發表於2021-12-09

迴圈是程式中的重要流程結構之一。迴圈語句能夠使程式程式碼重複執行,適用於需要重複一段程式碼直到滿足特定條件為止的情況。

所有流行的程式語言中都有迴圈語句。 ava  中採用的迴圈語句與C語言中的迴圈語句相似,主要有 while、do-while 和 for。另外 Java 5 之後推出了 for-each 迴圈語句,for-each 迴圈是 for 迴圈的變形,它是專門為集合遍歷而設計的。for-each 並不是一個關鍵字。

迴圈語句可以在滿足迴圈條件的情況下,反覆執行某一段程式碼,這段被重複執行的程式碼被稱為迴圈體。當反覆執行這個迴圈體時,需要在合適的時候把迴圈條件改為假,從而結束迴圈,否則迴圈將一直執行下去,形成死迴圈。

迴圈語句可能包含如下 4 個部分。

  • 初始化語句(init statement): 一條或多條語句,這些語句用於完成一些初始化工作,初始化語句在迴圈開始之前執行。
  • 迴圈條件(test_expression):這是一個 boolean 表示式,這個表示式能決定是否執行迴圈體。
  • 迴圈體(body_statement):這個部分是迴圈的主體,如果迴圈條件允許,這個程式碼塊將被重複執行。如果這個程式碼塊只有一行語句,則這個程式碼塊的花括號是可以省略的。
  • 迭代語句(iteration_statement):這個部分在一次迴圈體執行結束後,對迴圈條件求值之前執行,通常用於控制迴圈條件中的變數,使得迴圈在合適的時候結束。


while 語句

while 語句是 Java 最基本的迴圈語句,是一種先判斷的迴圈結構,可以在一定條件下重複執行一段程式碼。該語句需要判斷一個測試條件,如果該條件為真,則執行迴圈語句(迴圈語句可以是一條或多條),否則跳出迴圈。

while 迴圈語句的語法結構如下:

while(條件表示式) {
    語句塊;
}

其中語句塊中的程式碼可以是一條或者多條語句,而條件表示式是一個有效的 boolean 表示式,它決定了是否執行迴圈體。當條件表示式的值為 true 時,就執行大括號中的語句塊。

執行完畢,再次檢查表示式是否為 true,如果還為 true,則再次執行大括號中的程式碼,否則就跳出迴圈,執行 while 迴圈之後的程式碼。圖 1 表示了 while 迴圈語句的執行流程。



圖 1  while 迴圈語句執行流程圖

例 1

使用 while 語句計算 10 的階乘,其具體程式碼如下所示。

public static void main(String[] args) {int i = 1;int n = 1;while(i <= 10) {n=n*i;i++;}System.out.println("10的階乘結果為:"+n);}

在上述程式碼中,定義了兩個變數 i 和 n,迴圈每執行一次 i 值就加 1,判斷 i 的值是否小於等於 10,並利用 n=n*i 語句來實現階乘。當 i 的值大於 10 之後,迴圈便不再執行並退出迴圈。

執行程式,執行的結果如下所示:

10 的階乘結果為:3628800

do-while 語句

如你剛才所見,如果 while 迴圈一開始條件表示式就是假的,那麼迴圈體就根本不被執行。然而,有時需要在開始時條件表示式即使是假的情況下,while 迴圈至少也要執行一次。換句話說,有時你需要在一次迴圈結束後再測試中止表示式,而不是在迴圈開始時。

幸運的是,Java就提供了這樣的迴圈:do-while迴圈。do-while 迴圈語句也是 Java 中運用廣泛的迴圈語句,它由迴圈條件和迴圈體組成,但它與 while 語句略有不同。 do-while 迴圈語句的特點是先執行迴圈體,然後判斷迴圈條件是否成立。

do-while 語句的語法格式如下:

do {
    語句塊;
}while(條件表示式);

以上語句的執行過程是,首先執行一次迴圈操作,然後再判斷 while 後面的條件表示式是否為 true,如果迴圈條件滿足,迴圈繼續執行,否則退出迴圈。while 語句後必須以分號表示迴圈結束,其執行流程如圖 2 所示。



圖 2  do-while 迴圈語句的執行流程

例 2

編寫一個程式,計算 10 的階乘。使用 do-while 迴圈的實現程式碼如下所示。

public static void main(String[] args) {int number = 1,result = 1;do {result*=number;number++;}while(number <= 10);System.out.print("10階乘結果是:"+result);}

程式執行後輸出結果如下:

10 階乘結果是:3628800

例 3

在一個圖書系統的推薦圖書列表中儲存了 50 條資訊,現在需要讓它每行顯示 10 條,分 5 行進行顯示。下面使用 do-while 迴圈語句來實現這個效果,其具體程式碼如下所示。

public static void main(String[] args) {int bookIndex = 1;do {System.out.print(bookIndex+"\t");if(bookIndex%10 == 0) {System.out.println();}bookIndex++;}while(bookIndex<51);}

在上述程式碼中, 宣告一個變數 bookIndex 用來儲存圖書的索引,該變數賦值為 1 表示從第一本開始。在 do-while 迴圈體內,首先輸出了 bookIndex 的值,然後判斷 bookIndex 是否能被 10 整除,如果可以則說明當前行已經輸出 10 條,用 System.out.println() 語句輸出了一個換行符。之後使 bookIndex 加 1,相當於更新當前的索引。最後在 while 表示式中判斷是否超出迴圈的範圍,即 50 條以內。

執行程式,執行的結果如下所示。

1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50

while和do-while的比較

while 迴圈和 do-while 迴圈的相同處是:都是迴圈結構,使用 while(迴圈條件) 表示迴圈條件,使用大括號將迴圈操作括起來。

while 迴圈和 do-while 迴圈的不同處如下:

  • 語法不同:與 while 迴圈相比,do-while 迴圈將 while 關鍵字和迴圈條件放在後面,而且前面多了 do 關鍵字,後面多了一個分號。
  • 執行次序不同:while 迴圈先判斷,再執行。do-while 迴圈先執行,再判斷。
  • 一開始迴圈條件就不滿足的情況下,while 迴圈一次都不會執行,do-while 迴圈則不管什麼情況下都至少執行一次。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70007056/viewspace-2846763/,如需轉載,請註明出處,否則將追究法律責任。

相關文章