6-3 使用 switch 陳述

對於「若運算結果等於 1...,執行...,若運算結果等於 2,執行...,若運算結果等於 3...,執行...」這樣的條件分支判斷,您可以使用 switch 陳述來完成。

• switch 語法結構

switch 的語法結構如下所示:

switch ( variable ){
    case literal_value:
        code_block;
        [break;]
    case another_literal_value:
        code_block;
        [break;]
    [default:]
        code_block;
}
                            

在 switch 結構中的 variable 接受整數值,字串或字元,而 case 後的 literal_value 則設定要比對的整數,字串或字元,如果 variable等於 literal_value,則會執行其下的 code_block。

重點提示

Java SE 7 開始 switch 結構中的 variable 支援字串

每一個 case 下的 break 可以省略,如果撰寫了 break,則執行完對應的 block 之後,遇到 break 就會離開整個 switch 定義的區塊。

圖6-12、switch 的執行流程

default 的設定可有可無,如果設定了 default,則當所有的數值比對都沒有符合的時候,就會執行 default 中定義的陳述句,如果沒有設定 default 的話,則直接離開 switch 定義的區塊。

來看個實際的例子,可以使用 switch 改寫一下程式碼 6-4,將當中的鏈狀 if/else 結構用 switch 結構取代。

public class SwitchDemo{
    public static void main(String[] args){
        java.util.Scanner scanner =
                new java.util.Scanner(System.in);

        System.out.print("請輸入分數: ");
        int score = scanner.nextInt();
        int level = score/10;

        switch (level){
            case 10:
            case 9:
                System.out.println("得 A");
                break;
            case 8:
                System.out.println("得 B");
                break;
            case 7:
                System.out.println("得 C");
                break;
            case 6:
                System.out.println("得 D");
                break;
            default:
                System.out.println("得 E(不及格)");
        }
    }
}
                            
程式碼 6-6 SwitchDemo.java

程式碼 6-6 運作的方式,是將使用者輸入的數值除以 10,看看商數是多少,再將之丟入 switch 中比對,由此得到分數等級,一個執行的結果如下:

圖6-13、程式碼 6-6 的執行範例

您也許注意到了,程式碼中的第 11 行與第 12 行之間並沒有撰寫 break,case 與 case 之間沒有設定 break 時,執行流程會一路往下執行,而不理會之後的 case 比對值是否符合,所以在程式碼 6-5 中,無論是 100 分或 90 分以上的輸入,都會顯示等級為 A。

圖6-14、沒有 break 的話會繼續往下執行

您可以在 switch 陳述中使用其它的巢狀迴圈結構。

• 何時使用 switch 結構

switch 結構只能用來檢測相等的狀況,並無法判斷變數值是否大於或小於另一個值。您不能使用 switch 敘述來判斷一個以上的值,而且您只能使用整數,字串或字元的資料型態。

底下是具有使用 switch 敘述資格的一些例子:

  • 任何等式的檢測。
  • 單一變數的判斷,如 month。
  • 判斷值的型態為 int、short、byte 或 char。

相關資料

下列參考資料能夠對本章節所討論的話題提供更詳細的說明: