1. 程式人生 > 實用技巧 >四、流程控制--if else

四、流程控制--if else

一、if else語句

if 結構

if 語句是使用最多的條件分支結構,它屬於選擇語句,也可以稱為條件語句。

if 選擇結構是根據條件判斷之後再做處理的一種語法結構。預設情況下,if 語句控制著下方緊跟的一條語句的執行。不過,通過語句塊,if 語句可以控制多個語句。

if 語句的最簡語法格式如下,表示“如果滿足某種條件,就進行某種處理”。

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

其中“條件表示式”和“語句塊”是比較重要的兩個地方。

  1. 條件表示式:條件表示式可以是任意一種邏輯表示式,最後返回的結果必須是一個布林值。取值可以是一個單純的布林變數或常量,也可以是使用關係或布林運算子的表示式。如果條件為真,那麼執行語句塊;如果條件為假,則語句塊將被繞過而不被執行。
  2. 語句塊:該語句塊可以是一條語句也可以是多條語句。如果僅有一條語句,可省略條件語句中的大括號 {}。當從程式設計規範角度不要省略大括號,省略大括號會使程式的可讀性變差。


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("晴朗")”條件,滿足該條件輸出“去室外遊樂場遊玩”。