流程控制語句

weixin_34402408發表於2017-11-15

流程控制語句

@(Java學習)

在學習控制結構之前,瞭解一下(block)的概念。

塊(即複合語句)是指由一對大括號括起來的若干條簡單的Java語句。

  • 塊確定了變數的作用域。
  • 一個塊可以巢狀在另一個塊中。
  • 不能在巢狀的兩個塊中宣告同名的變數。

一、條件語句

Java有兩種分支結構:

  • if語句
  • switch語句

1.1 Java條件語句之if

對於“需要先判斷條件,條件滿足後才執行的情況”,可以使用if條件語句實現。

一個if語句包含一個布林表示式和一條或多條語句。

語法:

if(條件){
    條件成立時執行的程式碼
}

執行過程:

4625756-8abdc30c0ef0198d.jpg
if流程.jpg

1.2Java條件語句之if......else

if......else語句的操作比if語句多了一步:當條件成立時,則執行if部分的程式碼塊;條件不成立時,則進入else部分。

語法:

if(條件的布林表示式){
    程式碼塊1
}else{
    程式碼塊2`enter code here`
}

執行過程:

4625756-a0e8a5dfc61777d8.jpg
ifesle流程.jpg

1.3Java條件語句之多重if

if語句後面可以跟elseif...else語句,這種語句可以檢測到多種可能的情況。使用時需要注意下面幾點:

  • if語句至多有1個else語句,else語句在所有的elseif語句之後;
  • if語句可以有若干個elseif語句,必須在else語句之前;
  • 一旦其中一個elseif語句檢測為true,其他的elseif以及else語句都將跳過執行。

語法:

if(條件1){
    程式碼塊1
}else if(條件2){
    程式碼塊2
}else{
    程式碼塊3
}

執行過程:

4625756-b061e1ada6067303.jpg
多重if流程.jpg

1.4Java條件語句之巢狀if

使用巢狀的if-else語句是合法的。也就是說可以在另一個if或者elseif語句中使用if或者elseif語句。巢狀if語句,只有當外層if的條件成立時,才會判斷內層if的條件。

語法:

if(條件1){
    if(條件2){
        程式碼塊1
    }else{
        程式碼塊2
    }
}else{
    程式碼塊2
}

執行過程:

4625756-d3bbd5779db63b6d.jpg
巢狀if流程.jpg

1.5Java條件語句之switch

當需要對選項進行等值判斷時,使用if......else....結構就顯得有些笨拙,使用switch語句更加簡潔明瞭。switch語句判斷一個變數與一系列值中某個值是否相等,每個值稱為一個分支。

語法:

switch(表示式){
    case 值1:
        執行程式碼塊1
        break;
    case 值2:
        執行程式碼塊2
        break;
    case 值n;
        執行程式碼塊n
        break;
    default:
        預設執行的程式碼
}

執行過程:
當switch後表示式的值和case語句後的值相同時,從該位置開始向下執行,直到遇到break語句或者switch語句塊結束;如果沒有匹配的case語句則執行default塊的程式碼。

switch語句有如下規則:

  • switch語句中的變數型別只能為byte、short、int或者char
  • case標籤也可以是列舉變數,從Java SE7開始,case標籤還可以是字串字面量。
  • switch語句可以擁有多個case語句。每個case後面跟一個要比較的值和冒號。
  • case語句中的值的資料型別必須與變數的資料型別相同,而且只能是常量或者字面常量。
  • 當變數的值與case語句的值相等時,那麼case語句之後的語句開始執行,直到break語句出現才會跳出switch語句。
  • 當遇到break語句時,switch語句終止。程式跳轉到switch語句後面的語句執行。case語句不必須要包含break語句。如果沒有break語句出現,程式會繼續執行下一條case語句,直到出現break語句。
  • switch語句可以包含一個default分支,該分支必須是switch語句的最後一個分支。default在沒有case語句的值和變數值相等的時候執行。default分支不需要break語句。

二、迴圈語句

順序結構的程式語句只能被執行一次。如果想要同樣的操作執行多次,就需要使用迴圈結構。

Java中常用的迴圈結構如下:

  1. while迴圈
  2. do...while迴圈
  3. for迴圈

2.1Java迴圈語句之while

while是最基本的迴圈。

語法:

while(判斷條件){
    迴圈操作
}

執行過程:

  1. 判斷while後面的條件是否成立(true/false);
  2. 當條件成立時,執行迴圈內的操作程式碼,然後重複執行1、 2、,直到迴圈條件不成立為止。

特點:
先判斷,後執行。

2.2Java迴圈語句之do...while

do...while迴圈和while迴圈相似,對於while語句而言,如果不滿足條件,則不能進入迴圈。不同的是,do...while迴圈至少會執行一次

語法:

do{
    迴圈操作
}while(判斷條件);

執行過程:

  1. 先執行一遍迴圈操作,然後判斷迴圈條件是否成立;
  2. 如果條件成立,繼續執行1、 2,直到迴圈條件不成立為止。

特點:
先執行,後判斷

注意:

  • 布林表示式在迴圈體的後面,所以語句塊在檢測布林表示式之前已經執行了。如果布林表示式的值為true,則語句塊一直執行,直到布林表示式的值為false。

2.3Java迴圈語句之for

雖然所有迴圈結構都可以用while或者do...while表示,但Java提供了另一種語句——for迴圈,使一些迴圈結構變得更加簡單。for迴圈執行的次數是在執行前就確定的。

語法:

for(迴圈變數初始化;迴圈條件;迴圈變數變化){
    迴圈操作
}

執行過程:

  1. 執行迴圈變數初始化部分,設定迴圈的初始狀態,此部分在整個迴圈中只執行一次;
  2. 進行迴圈條件的判斷,如果條件為true,則執行迴圈體內程式碼;如果為false,則直接退出迴圈;
  3. 執行迴圈變數變化部分,改變迴圈變數的值,以便進行下一次條件判斷;
  4. 依次重新執行2/3/4、直到退出迴圈。

特點:
相比while和do...while語句結構更加簡潔易讀

注意:

  1. for關鍵字後面括號中的三個表示式必須用";"隔開,三個表示式都可以省略,但";"不能省略。
  • 省略“迴圈變數初始化”,可以在for語句之前由賦值語句進行變數初始化操作;
  • 省略“迴圈條件”,可能會造成迴圈將一直執行下去,也就是我們常說的“死迴圈”現象;
  • 省略“迴圈變數變化”,可以在迴圈體中進行迴圈變數的變化。
  1. for迴圈變數初始化和迴圈變數變化部分,可以是使用“;”同時初始化或者改變多個迴圈變數的值。
  2. 迴圈條件部分可以使用邏輯運算子組合的表示式,表示複雜判斷條件,但一定注意運算的優先順序。
2.3.1增強for迴圈

Java5引入了一種主要用於陣列的增強型for迴圈。

語法:

for(宣告語句: 表示式){
    執行程式碼
}
  • 宣告語句:宣告新的區域性變數,該變數的型別必須和陣列元素的型別匹配。其作用域限定在迴圈語句塊,其值與此時陣列元素的值相等。
  • 表示式:表示式是要訪問的陣列名,或者是返回值為陣列的方法。

三、迴圈跳轉

3.1Java迴圈跳轉語句之break

在Java中,可以使用break語句退出指定的迴圈,直接執行迴圈後面的程式碼。

break主要用在迴圈語句或者switch語句中,用來跳出整個語句塊。break跳出最裡層的迴圈,並且繼續執行該迴圈下面的語句。

語法:
break的用法很簡單,就是迴圈結構中的一條語句。

break;

Java還提供了一種帶標籤的break語句,用於跳出多重巢狀的迴圈語句。標籤必須放在希望跳出的最外層之前,並且必須緊跟一個冒號。

語法:

label:
{
    //邏輯程式碼
    if(condition)break label;//退出迴圈
    //邏輯程式碼
}

3.2Java迴圈跳轉語句之continue

continue適用於迴圈控制結構。

continue的作用是跳過迴圈體剩餘的語句執行下一次迴圈。

  • 在for迴圈中,continue語句使程式立即跳轉到更新語句。
  • 在while或者do...while迴圈中,程式立即跳轉到布林表示式的判斷語句。

語法:

continue就是迴圈體中一條簡單的語句。

continue;

注意:

  • continue與break語句一樣,中斷正常的控制流程。continue語句將控制轉移到最內層迴圈的首部。
  • 如果將continue語句用於for迴圈中,就可以跳到for迴圈的“更新”部分。
  • 也有一種帶標籤的continue語句,將跳到與標籤匹配的迴圈首部。

學海無涯苦作舟

4625756-d300b818fd06aaa9.jpg
我的微信公眾號.jpg

相關文章