四、流程控制--if else
一、if else語句
if 結構
if 語句是使用最多的條件分支結構,它屬於選擇語句,也可以稱為條件語句。
if 選擇結構是根據條件判斷之後再做處理的一種語法結構。預設情況下,if 語句控制著下方緊跟的一條語句的執行。不過,通過語句塊,if 語句可以控制多個語句。
if 語句的最簡語法格式如下,表示“如果滿足某種條件,就進行某種處理”。
if (條件表示式) { 語句塊; }
其中“條件表示式”和“語句塊”是比較重要的兩個地方。
條件表示式
:條件表示式可以是任意一種邏輯表示式,最後返回的結果必須是一個布林值。取值可以是一個單純的布林變數或常量,也可以是使用關係或布林運算子的表示式。如果條件為真,那麼執行語句塊;如果條件為假,則語句塊將被繞過而不被執行。語句塊
:該語句塊可以是一條語句也可以是多條語句。如果僅有一條語句,可省略條件語句中的大括號 {}。當從程式設計規範角度不要省略大括號,省略大括號會使程式的可讀性變差。
if 條件語句的執行流程如圖 1 所示。
圖1 if 語句執行流程圖
例 1
編寫一個 Java 程式,允許使用者從鍵盤輸入一個數字,再判斷該數是否大於 100。使用 if 語句的實現程式碼如下:
public static void main(String[] args) { System.out.println("請輸入一個數字:"); Scanner input = new Scanner(System.in);int num = input.nextInt(); // 接收鍵盤輸入資料 // 判斷使用者輸入的資料是否大於100 if (num > 100) { System.out.println("輸入的數字大於100"); } // 判斷使用者輸入的資料是否等於100 if (num == 100) { System.out.println("輸入的數字等於100"); } // 判斷使用者輸入的資料是否小於100 if (num < 100) { System.out.println("輸入的數字小於100"); } }
執行該程式,分別使用鍵盤輸入 99、100 和 105,結果如下所示:
請輸入一個數字: 99 輸入的數字小於100 請輸入一個數字: 100 輸入的數字等於100 請輸入一個數字: 105 輸入的數字大於100
if-else 結構
單 if 語句僅能在滿足條件時使用,而無法執行任何其他操作(停止)。而結合 else 語句的 if 可以定義兩個操作,此時的 if…else 語句表示“如果條件正確則執行一個操作,否則執行另一個操作”。
使用 if…else 語句的語法格式如下所示:
if (表示式) { 語句塊1; } else { 語句塊2; }
在上述語法格式中,如果 if 關鍵字後面的表示式成立,那麼就執行語句塊 1,否則的話則執行語句塊 2,其執行流程如圖 2 所示。
例 子
在例 3 中為實現比較 num1 和 num2 的大小,使用了 3 個 if 條件語句分別判斷大於、等於和小於的情況。下面使用 if…else 雙條件來實現,具體程式碼如下:
public static void main(String[] args) { int num1 = 50; int num2 = 34; // 如果num1等於num2 if (num1 == num2) { System.out.println("num1等於num2"); } // 如果num1大於num2 if (num1 > num2) { System.out.println("num1大於num2"); } else { // 否則就是num1小於num2 System.out.println("num1小於num2"); } }
雙條件語句減少了程式碼的編寫量,同時增強了程式的可讀性。簡化後的結果還是一樣,執行後會輸出“num1 大於 num2”。
多條件 if-else-if 語句
if 語句的主要功能是給程式提供一個分支。然而,有時候程式中僅僅多一個分支是遠遠不夠的,甚至有時候程式的分支會很複雜,這就需要使用多分支的 if…else if 語句。
通常表現為“如果滿足某種條件,就進行某種處理,否則如果滿足另一種條件才執行另一種處理……,這些條件都不滿足則執行最後一種條件”。
if…else if 多分支語句的語法格式如下所示:
if(表示式1) { 語句塊1; } else if(表示式2) { 語句塊2; ... } else if(表示式n) { 語句塊n; } else { 語句塊n+1; }
可以看出,else-if 結構實際上是 if-else 結構的多層巢狀。明顯的特點就是在多個分支中只執行一個語句組,而其他分支都不執行,所以這種結構可以用於有多種判斷結果的分支中。
在使用 if…else if 語句時,依次判斷表示式的值,當某個分支的條件表示式的值為 true 時,則執行該分支對應的語句塊,然後跳到整個 if 語句之外繼續執行程式。如果所有的表示式均為 false,則執行語句塊 n+1,然後繼續執行後續程式,其執行流程如圖 3 所示。
例 子
同樣以比較 num1 和 num2 的大小為例,使用 if…else if 多條件的實現程式碼如下:
public static void main(String[] args) { int num1 = 50; int num2 = 34; if (num1 == num2) { // 如果num1等於num2 System.out.println("num1等於num2"); } else if (num1 > num2) { // 如果num1大於num2 System.out.println("num1大於num2"); } else { // 否則就是小於 System.out.println("num1小於num2"); } }
如上述程式碼所示,num1 和 num2 不滿足 if 語句的“num1==num2”條件,接著測試 else if 的“num1>num2”條件,滿足該條件並輸出“num1 大於 num2”。
巢狀 if 的使用
if 語句的用法非常靈活,不僅可以單獨使用,還可以在 if 語句裡巢狀另一個 if 語句。同樣,if…else 語句和 if…else if 語句中也可以巢狀另一個 if 結構的語句,以完成更深層次的判斷。
巢狀 if 的語法格式如下:
if(表示式1) { if(表示式2) { 語句塊1; } else { 語句塊2; } } else { if(表示式3) { 語句塊3; } else if(表示式4) { 語句塊4; } else { if(表示式n) { 語句塊n; } else { 語句塊n+1; } } }
在上述格式中,應該注意每一條 else 與離它最近且沒有其他 else 對應的 if 相搭配,其執行流程如圖 4 所示。
例 子
活動計劃安排,如果今天是工作日,去上班;如果今天是週末,則出去遊玩;同時,如果週末天氣晴朗,去室外遊樂場遊玩,否則去室內遊樂場遊玩。實現程式碼如下:
public static void main(String[] args) { String today = "週末"; String weather = "晴朗"; if (today.equals("週末")) { if (weather.equals("晴朗")) { System.out.println("去室外遊樂場遊玩"); } else { System.out.println("去室內遊樂場遊玩"); } } else { System.out.println("去上班"); } }
如上述程式碼所示,today 滿足 if 語句的“today.equals("週末")”條件,接著測試 weather 是否滿足“weather.equals("晴朗")”條件,滿足該條件輸出“去室外遊樂場遊玩”。