對於「若運算結果等於 1...,執行...,若運算結果等於 2,執行...,若運算結果等於 3...,執行...」這樣的條件分支判斷,您可以使用 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 定義的區塊。
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 中比對,由此得到分數等級,一個執行的結果如下:
您也許注意到了,程式碼中的第 11 行與第 12 行之間並沒有撰寫 break,case 與 case 之間沒有設定 break 時,執行流程會一路往下執行,而不理會之後的 case 比對值是否符合,所以在程式碼 6-5 中,無論是 100 分或 90 分以上的輸入,都會顯示等級為 A。
註
您可以在 switch 陳述中使用其它的巢狀迴圈結構。
switch 結構只能用來檢測相等的狀況,並無法判斷變數值是否大於或小於另一個值。您不能使用 switch 敘述來判斷一個以上的值,而且您只能使用整數,字串或字元的資料型態。
底下是具有使用 switch 敘述資格的一些例子:
下列參考資料能夠對本章節所討論的話題提供更詳細的說明: