CodeGym /課程 /JAVA 25 SELF /傳統 switch:語法與範例

傳統 switch:語法與範例

JAVA 25 SELF
等級 10 , 課堂 3
開放

1. 前言

想像一下:你正在為一家咖啡店寫程式。使用者可以選擇飲品,而你需要對這個選擇做出回應。當然可以使用一大堆 if-else if-else,但看起來並不理想:

if (choice == 1) 
{
    System.out.println("你選擇了濃縮咖啡。");
} 
else if (choice == 2) 
{
    System.out.println("你選擇了卡布奇諾。");
} 
else if (choice == 3) 
{
    System.out.println("你選擇了拿鐵。");
} 
else 
{
    System.out.println("沒有這種飲品。");
}

是不是很笨重?如果選項有 10 或 20 個呢?這時就能用 switch 運算子幫忙,讓你能根據變數的值,以優雅而精簡的方式在多個選項中做選擇。

傳統 switch 的語法

switch 在 Java 中的語法如下:


switch (vyrazhenie) 
{
    case znachenie1:
        // 當 vyrazhenie == znachenie1 時要執行的動作
        break;
    case znachenie2:
        // 當 vyrazhenie == znachenie2 時要執行的動作
        break;
    ...
    default:
        // 若沒有與任何 case 相符時要執行的動作
        break;
}
Java 中 switch 運算子的語法

關鍵元素:

  • switch (表達式) — 將該表達式的結果與每個 case 比較。
  • case : — 用來與表達式比對的分支。
  • break; — 結束 switch 區塊的執行(否則會「落入」下一個 case)。
  • default: — 當沒有任何 case 相符時執行。

2. switch 的使用範例

範例 1:經典——選擇飲品

我們來實作一個咖啡店選單:

import java.util.Scanner;

public class CoffeeShop 
{
    public static void main(String[] args) 
    {
        Scanner console = new Scanner(System.in);

        System.out.println("請選擇飲品:");
        System.out.println("1 - 濃縮咖啡");
        System.out.println("2 - 卡布奇諾");
        System.out.println("3 - 拿鐵");
        int choice = console.nextInt();

        switch (choice) 
        {
            case 1:
                System.out.println("你選擇了濃縮咖啡。");
                break;
            case 2:
                System.out.println("你選擇了卡布奇諾。");
                break;
            case 3:
                System.out.println("你選擇了拿鐵。");
                break;
            default:
                System.out.println("沒有這種飲品。");
                break;
        }
    }
}

會發生什麼事:

  • 使用者輸入飲品的編號。
  • 變數 choice 的值會與每個 case 比較。
  • 若相符 — 執行對應區塊,之後由 break 結束 switch 的執行。
  • 若沒有任何相符 — 執行 default

範例 2:以字串切換

能在 switch 中使用的型別不多,但字串——可以!這對於命令選單很方便:

import java.util.Scanner;

public class CommandMenu 
{
    public static void main(String[] args) 
    {
        Scanner console = new Scanner(System.in);

        System.out.println("請輸入指令 (start, stop, pause):");
        String command = console.nextLine();

        switch (command) 
        {
            case "start":
                System.out.println("啟動程式!");
                break;
            case "stop":
                System.out.println("停止程式。");
                break;
            case "pause":
                System.out.println("暫停。");
                break;
            default:
                System.out.println("未知的指令。");
                break;
        }
    }
}

請注意:switch 中比較字串時會區分大小寫!"Start""start" 是不同的字串。

3. 傳統 switch 支援哪些型別?

在傳統 switch 中,只能使用特定型別:

  • 原始整數型別: byteshortcharint
  • 列舉: enum(下節課會談)
  • 字串: String — 比較時區分大小寫

不可 使用:booleanfloatdouble、陣列、任意類別的物件(除了 enumString)。

char 為例

char grade = 'B';

switch (grade) 
{
    case 'A':
        System.out.println("太棒了!");
        break;
    case 'B':
        System.out.println("不錯。");
        break;
    case 'C':
        System.out.println("尚可。");
        break;
    default:
        System.out.println("請再試一次。");
        break;
}

4. break 的必要性:如果忘記會怎樣?

新手最常見的錯誤——忘了寫 break;。來看看會發生什麼:

int day = 2;

switch (day) 
{
    case 1:
        System.out.println("週一");
        break;
    case 2:
        System.out.println("週二");
    case 3:
        System.out.println("週三");
        break;
    default:
        System.out.println("未知的星期");
        break;
}

結果:

週二
週三

為什麼?因為在 case 2 之後沒有 break,執行便會「落入」下一個 case(這稱為 fall-through)。有時候這很有用,但多半是錯誤。

5. 群組化 case:當多個選項行為相同

若多個值需要相同的行為,可以把它們連續寫在一起:

int month = 1;

switch (month) 
{
    case 12:
    case 1:
    case 2:
        System.out.println("冬天");
        break;
    case 3:
    case 4:
    case 5:
        System.out.println("春天");
        break;
    case 6:
    case 7:
    case 8:
        System.out.println("夏天");
        break;
    case 9:
    case 10:
    case 11:
        System.out.println("秋天");
        break;
    default:
        System.out.println("未知的月份");
        break;
}

這裡: 如果 month1212,程式會輸出 "冬天"

6. 比較:switchif-else

情境 if-else switch
選項很多 冗長的鏈結,較難閱讀 簡潔,所有選項一目了然
區間比較 可以使用(if (x > 5 && x < 10) 不行,只能是具體值
支援的型別 任何型別 僅特定型別(見上文)
break 相關的陷阱 沒有 有,務必留意 break

7. 使用 switch 的常見錯誤

錯誤一:忘了寫 break
最常見的問題:漏掉 break,導致程式執行到你未預期的 case

錯誤二:不支援的型別
嘗試使用 doublefloatboolean —— 編譯器會說「不可以」。

錯誤三:大小寫不同的字串
使用者輸入了 "Start",但你期望 "start" —— switch 不會匹配。最好先把字串統一為同一種大小寫:

switch (command.toLowerCase()) 
{
    case "start":
        // ...
}

錯誤四:在 case 中使用變數,而非常數
case 中只允許常數。若使用變數——會出現編譯錯誤。

錯誤五:重複的 case
兩個相同的 case 值——編譯器不會放過。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION