Java中的循環結構

對於編程語言來說,必然存在三種結構,分別為:順序結構、分支結構和循環結構,當然,Java也不例外。

對於順序結構來說,沒啥好說的,就是代碼從上到下依次執行,期間不存在任何的條件判斷和跳轉。代碼編寫順序是什麼樣子,其執行順序就是什麼樣子。所以,我主要介紹的是另外兩種結構,也就是可以用來進行進行流程進行控制的結構,也即:分支結構和循環結構。

關於分支結構我已經在之前的文章介紹過,這裡就不過多介紹,本篇只講循環結構。

循環結構定義

所謂循環結構是指當符合判斷條件時重複執行某一段代碼,直到不符合判斷條件時終止。對於循環結構來說,大致分為四個部分,分別是:初始化語句,循環條件,循環體(也就是需要循環執行的一段代碼)、迭代語句或步進語句。

初始化語句:由一條或多條語句組成,在循環開始之前執行。

循環條件:就是一個布爾表達式,決定是否應該執行循環體

循環體:需要被循環執行的一段代碼。

迭代語句:每一次循環執行完畢後,在執行下一次循環判斷條件執行執行的語句,目的是控制循環條件中的變量,從而使得循環在合適的時機結束。

循環結構示例

在Java中的循環大致分為:while、do-while、for三種。

  • while

對於while循環來說,其格式為:

while (循環條件) {

執行代碼

}

關於while的示例代碼如下圖所示:

Java中的循環結構

其執行結果如下圖所示:

Java中的循環結構

其中,迭代語句作為循環體的一部分放在了循環體中。需要強調一點的是,循環判斷條件必須存在結束的條件也就是指為false的情況,否則會導致死循環。下面的例子就是死循環的情況。

Java中的循環結構

由於迭代語句為自減,而count會恆小於0,不管運行多久,循環條件的值會一直為true,從而導致死循環。

  • do-while

對於do-while循環來說,其格式為:

do {

執行代碼

} while(循環條件);

需要說明的是,while括號後面的分號不可省略。關於do-while循環的示例代碼如下圖所示:

Java中的循環結構

其執行結果如下圖所示:

Java中的循環結構

do-whille和while從結構上有些類似,實際上大多數情況下,使用while和do-while的區別不大。而且都要求必須存在使循環條件為false的情況來結束循環。但是從本質上看,兩者還是有區別的。

對於while循環來說是先判斷循環條件後執行循環體,而do-while循環則是先執行循環體再進行判斷循環條件。這樣,當首次判斷循環條件的結果為false時,對於while來說不會執行循環代碼,而do-while則會執行一次循環代碼。如下圖的例子所示:

Java中的循環結構

執行結果如下圖所示:

Java中的循環結構

因此在選擇while和do-while時,需要想清楚自己的需求。

  • for

for循環是Java中常用的循環,其格式為:

for (初始化語句; 循環條件; 迭代語句) {

執行代碼

}

關於for循環的示例代碼如下圖所示:

Java中的循環結構

執行結果如下圖所示:

Java中的循環結構

相比於while循環和do-while循環,for循環看起來更加層次分明。因為for循環將初始化語句和迭代語句也囊括在了一個括號中,不像while循環和do-while循環那樣,將初始化語句放在循環之前,迭代語句放在循環體中。當然,這只是感官上的區別。

實際上,在大多數情況下,for循環完全可以取代while循環和do-while循環。

另外需要強調一點的是,儘量避免在循環中修改循環變量的值。否則就可能出現死循環。下圖就是一個在循環中修改循環變量,從而導致死循環的例子。

Java中的循環結構

此外for循環還有多種省略寫法,其中,初始化語句、循環條件、迭代語句甚至循環體都可以省略,最簡潔的for循環為:

for(;;) {

}

這種寫法在語法上是允許的。只不過由於沒有循環條件,因此會一直執行循環體。雖然循環體中沒有任何的語句,但是這依然是個死循環,導致程序無法跳出循環繼續向下執行。當然,這種玩法也只有在各種面試題中見到,日常開發中很少見。

以上所講得都是單層循環,實際上循環是可以多層嵌套的。比如下圖所示:

Java中的循環結構

執行結果如下圖所示:

Java中的循環結構

循環結構的控制

所謂循環的結構的控制就是在適合的時候中斷循環或跳過本次循環的剩餘的語句開始下一次循環。在Java中,通常用break來中斷循環結構,用continue來跳過本次循環中剩餘的語句並開始下一次循環。

  • break中斷循環

對於break來說,不論是哪種循環,只要執行到break便會中斷整個循環,其示例代碼如下圖所示:

Java中的循環結構

其執行結果如下圖所示:

Java中的循環結構

本例子是在i為5的時候使用break來中斷循環,如果沒有這步操作,本該打印從0到9,但是有了之後在i為5的時候便通過break終止了循環的執行,因此只打印出了從0到4。

  • continue跳過本次循環

與break類似,continue也是適用於任何的循環結構,只不過continue只是跳過本次循環中continue之後的語句立即開始下一次循環罷了。其示例代碼如下圖所示:

Java中的循環結構

其執行結果如下圖所示:

Java中的循環結構

由於在i為5的時候使用了continue來調用continue之後的語句,從而導致打印語句被跳過,因此打印出了除5之外的從0到9的數字。

  • 使用標籤來輔助break和continue

此外,Java中還存在使用標籤來輔助break和continue的使用。因為,不論是break還是continue都只會中斷或跳過當前層的循環。若循環為嵌套循環,卻像在內層循環中斷或跳過外層循環,就可以通過標籤的輔助來實現。

Java中定義標籤的語法是“標籤名:”。雖然標籤名可以在很多位置定義,但是隻有放在循環前時才有意義。下面我分別給出break和continue使用標籤的例子。

break使用標籤的例子如下圖所示:

Java中的循環結構

其執行結果如下圖所示:

Java中的循環結構

continue使用標籤的例子如下圖所示:

Java中的循環結構

執行結果如下圖所示:

Java中的循環結構


分享到:


相關文章: