循序結構無法判斷選擇,需分支結構控制程式流程。Java 提供 if 與 switch 兩大分支語句。
if (布林運算式) {
// true 時執行
}
if (布林運算式) {
// true
} else {
// false
}
if (條件1) { }
else if (條件2) { }
else if (條件3) { }
else { /* 以上皆否 */ }
規則: 最多一個 else,置於所有 else if 之後;一旦匹配跳過其餘分支。
if (x == 30) {
if (y == 10) {
System.out.println("X=30 and Y=10");
}
}
判斷變數是否等於某組常量值,適用於有限離散值的等值比較。
switch (運算式) {
case 值1:
// 程式碼
break; // 可選,省略則貫穿執行下一 case
case 值2:
case 值3: // 共用同一處理
// 程式碼
break;
default: // 可選,無匹配時執行
// 程式碼
}
byte, short, int, char、String (JDK 1.7+)、enum。case 值必須為編譯期常量,型別與運算式相容。case 開始執行,遇 break 或結束跳出。break 則貫穿執行後續 case(常用於合併情況)。default 置於最後,無需 break。char grade = 'C';
switch (grade) {
case 'A': System.out.println("優秀"); break;
case 'B':
case 'C': System.out.println("良好"); break; // B、C 同處理
case 'D': System.out.println("及格"); break;
case 'F': System.out.println("需努力"); break;
default: System.out.println("未知等級");
}
System.out.println("你的等級是 " + grade);
// 輸出:良好 / 你的等級是 C
現代寫法更簡潔、無貫穿風險、可作為運算式返回值:
String result = switch (grade) {
case 'A' -> "優秀";
case 'B', 'C' -> "良好";
case 'D' -> "及格";
case 'F' -> "需努力";
default -> "未知等級";
};
int score = switch (grade) {
case 'A': yield 90;
case 'B': yield 80;
case 'C': yield 70;
default: yield 0;
};
| 場景 | 推薦 |
|---|---|
| 布林條件、範圍判斷、複雜邏輯 | if-else |
| 單一變數對多個常量值等值比較 | switch |
| 需要返回值、簡潔表達 | Switch 表達式 (Java 14+) |
// fall through 或改用新語法。if-else if 應將最可能/最具體條件前置。if (x > 0); { ... } 分號導致區塊無條件執行。switch(null) 拋 NullPointerException,需先非空檢查。