1. 程式人生 > >Java 基礎(六):迴圈

Java 基礎(六):迴圈

### 迴圈 老生常談的一個控制流程了,我們在是使用陣列和集合的時候,遍歷元素的時候經常會用到迴圈的結構,Java具有非常靈活的三種迴圈機制: ![image-20190827222828453](http://viyoungblog.oss-cn-beijing.aliyuncs.com/2019-08-27-142828.png) 根據是否知道迴圈的次數可以為分為while迴圈,do...while迴圈和for迴圈,下面我們單獨來了解一下: ### while迴圈 當我們不知道迴圈的具體次數時,可以使用while迴圈進行操作,下面是while迴圈的虛擬碼 ```java 定義初始變數 while (控制條件) { 迴圈體 } ``` ![image-20190827222337726](http://viyoungblog.oss-cn-beijing.aliyuncs.com/2019-08-27-142337.png) 程式碼示例: ```java // 定義控制迴圈變數 int start = 0; // 迴圈條件 while (start < 2) { // 迴圈體 System.out.println("1"); // 改變控制迴圈變數 start++; } } ``` ### do...while迴圈 和while迴圈類似,do...while迴圈同樣適用於不知道迴圈具體的次數時,但是和while迴圈不太一樣的是,如果控制迴圈的變數初始時就不符合迴圈條件,那麼迴圈體一次也不會執行,而do...while迴圈至少會把迴圈體執行一次。 ```java 定義初始變數 do { 迴圈體 } while (迴圈條件); ``` ![image-20190827223154870](http://viyoungblog.oss-cn-beijing.aliyuncs.com/2019-08-27-143155.png) 程式碼示例: ```java // 定義控制迴圈變數 int start = 0; do { // 迴圈體 System.out.println("1"); // 控制迴圈變數 start++; // 迴圈條件 } while(start < 0); ``` ### for迴圈 下面進入了我們的重頭戲,日常中使用的最多的for迴圈,由於普通for迴圈可以準確的控制迴圈的次數,所以一般當我們在需要手動控制迴圈次數的時候,我們會使用普通for迴圈 ```java for(定義初始變數;判斷條件;變數變化){ 迴圈體 } ``` 這裡的流程圖和while是類似的,下面我們來看一下如何遍歷一個數組: ```java int[] a = {1,2,3,4}; for (int i = 0; i < a.length; i++) { System.out.println(a[i]); } ``` 同樣的遍歷一個集合也可以使用普通for迴圈: ```java List list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } ``` 這裡細心的同學可能已經注意到了,我們這裡描述的時候一直使用的是普通for迴圈,那麼既然有普通的for迴圈,就一定有不普通的for迴圈,下面我們來看一下兩種不太普通的for迴圈 #### 增強for迴圈 在JDK 5之後,出現了一種語法糖--forEach迴圈,也稱之為增強for迴圈,迴圈語法如下 ```java for(資料型別 定義元素名:迴圈列表) { 迴圈體 } ``` foreach語句是for語句的特殊簡化版本,但是foreach語句並不能完全取代for語句,然而,任何的foreach語句都可以改寫為for語句版本。 foreach並不是一個關鍵字,習慣上將這種特殊的for語句格式稱之為“foreach”語句。 #### 關於增強for迴圈和普通for迴圈的效率問題 陣列遍歷:增強型for迴圈和普通迴圈遍歷原理相同,效率相同。 集合遍歷:增強型for迴圈的遍歷其本質就是迭代器 iterator的遍歷,和普通迴圈遍歷相比,各自有自己適用的場景,比如說普通for迴圈比較適合List類(陣列類)遍歷通過下標查詢資料的,而增強型for迴圈則比較適合**連結串列**結構的集合的遍歷。 在**資料量較大**的情況下,如果是集合使用增強for迴圈的效率會低於使用普通for迴圈。 ### 跳出迴圈的兩個關鍵字 我們在使用的過程中,如果遇到需要中斷一個流程的情況,通常會使用到以下兩個關鍵字:`break`和`continue`。 `break` 主要用在迴圈語句或者 switch 語句中,用來跳出整個語句塊。break 跳出最裡層的迴圈,並且繼續執行該迴圈下面的語句。當然我們也可以使用標籤的方式來跳出某個指定的迴圈。 ```java read_data: while(...) { for(...) { break read_data; //這裡就是直接跳出了while迴圈 } } ``` `continue` 適用於**任何迴圈控制結構**中。作用是讓程式立刻**跳轉到下一次迴圈**的迭代。在 for 迴圈中,`continue` 語句使程式立即跳轉到更新語句。在 while 或者 do…while 迴圈中,程式立即跳轉到布林表示式的判斷語句。當然,`continue`也有一種帶標籤的形式,將跳到與標籤匹配的迴圈首部。用法和break一樣,這裡就不再舉例說明。 ### 公眾號 ![](http://viyoungblog.oss-cn-beijing.aliyuncs.com/viyoung/2020-03-15-qrcode_for_gh_a65beceb0947_