每個 Java 範例都是獨立的 Main.java,可用 JDK 11 編譯執行;請一次複製一個範例。題庫使用 public class Solution 中的 public static solve(...) 方法,請保留題目指定的型別與參數,使用 return 交回答案,不必另外讀取輸入或撰寫 main。
01|if、else if 與 else
if 的條件必須得到 boolean。if/else if/else 由上到下檢查,只執行第一個符合的分支。條件較嚴格的門檻應先檢查;即使只有一行,也保留大括號,避免新增敘述後改變意思。
public class Main {
public static void main(String[] args) {
int score = 85;
if (score >= 90) {
System.out.println("A");
} else if (score >= 75) {
System.out.println("B");
} else if (score >= 60) {
System.out.println("C");
} else {
System.out.println("再練習");
}
}
}B
教材對照:PDF 第 2–5 頁
02|switch 的 case、default 與 break
Java 11 使用傳統 switch 敘述:case 值後放冒號,依需要用 break 離開。匹配後若沒有 break,會往下執行後續敘述,稱為 fall-through,不會再比對下一個 case。default 處理沒有匹配的情況,最多一個。
- Java 11 支援 byte、short、char、int、對應包裝型別、String 與 enum;不支援 long、float、double、boolean。
- 一般 case 須為可在編譯期確定的常數,且不可重複;僅加上 final 不代表一定是編譯期常數。enum 使用其列舉常數。
- switch 的 String 比較依內容、區分大小寫;null 不能直接放入此處的 switch。
- 本課使用 Java 11,不使用較新版本的箭頭 switch、switch expression 或 yield。
public class Main {
public static void main(String[] args) {
String day = "SAT";
switch (day) {
case "SAT":
case "SUN":
System.out.println("假日");
break;
case "MON":
System.out.println("新的一週");
break;
default:
System.out.println("上課日");
}
}
}假日
教材對照:PDF 第 6–16 頁
03|for 的初始化、條件與步進
for (初始化; 條件; 步進) 的初始化只執行一次;每次先檢查條件,成立才執行主體,之後做步進,再回到條件。條件可一開始就是 false,因此主體不保證執行。
public class Main {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 5; i++) {
sum += i;
}
System.out.println(sum);
for (int left = 0, right = 2; left <= right; left++, right--) {
System.out.println(left + ":" + right);
}
}
}15 0:2 1:1
教材對照:PDF 第 17–18、21–23 頁
04|巢狀迴圈與二維資料
外層每走一步,內層就完整執行一輪。教材用九九乘法表說明這個規律;下例縮成兩列三欄,先觀察 row、column 如何改變,再自行擴大。迴圈次數通常相乘,資料很大時要留意工作量。
public class Main {
public static void main(String[] args) {
for (int row = 1; row <= 2; row++) {
for (int column = 1; column <= 3; column++) {
System.out.println(row + "*" + column + "=" + row * column);
}
}
}
}1*1=1 1*2=2 1*3=3 2*1=2 2*2=4 2*3=6
教材對照:PDF 第 18–19、25 頁
05|break 與 continue
break 結束最近一層迴圈或 switch;continue 跳過本輪剩餘程式。for 的 continue 會先做步進,再檢查條件。以下先處理停止條件,再跳過 3 的倍數,最後才把數字加到總和。
public class Main {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 10; i++) {
if (i == 8) {
break;
}
if (i % 3 == 0) {
continue;
}
sum += i;
}
System.out.println(sum);
}
}19
教材對照:PDF 第 19–23、28、31 頁
06|for-each 與多維陣列
for (型別 變數 : 陣列或 Iterable) 依序取得每個元素,不需要手動維護索引。二維資料可先取得一列,再取得列內元素。若要修改陣列元素或使用索引,傳統 for 常較直接。
public class Main {
public static void main(String[] args) {
int[][] rows = {{2, 4}, {6}};
int sum = 0;
for (int[] row : rows) {
for (int value : row) {
sum += value;
value = 0;
}
}
System.out.println(sum);
System.out.println(rows[0][0]);
}
}12 2
教材對照:PDF 第 24–26 頁
07|while 先判斷,do-while 先做一次
while 適合以條件決定是否繼續;每輪執行前都要判斷。do-while 則先執行一次,再檢查條件,適合至少要操作一次的流程。do-while 的 while (...) 後面必須加分號。
public class Main {
public static void main(String[] args) {
int remaining = 3;
while (remaining > 0) {
System.out.println(remaining);
remaining--;
}
int attempts = 0;
do {
attempts++;
} while (attempts < 0);
System.out.println("嘗試次數=" + attempts);
}
}3 2 1 嘗試次數=1
教材對照:PDF 第 27–31 頁
08|label 指定離開哪一層
label 是敘述前的標籤,本身不改變執行方向。break outer 可離開名為 outer 的整段迴圈;continue outer 則繼續該外層迴圈的下一輪。Java 沒有可用的 goto 敘述。標籤需要清楚命名,避免複雜跳轉。
public class Main {
public static void main(String[] args) {
int[][] grid = {{1, 2}, {3, 4}};
int foundRow = -1;
outer:
for (int row = 0; row < grid.length; row++) {
for (int value : grid[row]) {
if (value == 3) {
foundRow = row;
break outer;
}
}
}
System.out.println(foundRow);
}
}1
教材對照:PDF 第 20–21、26 頁
WHEN SOMETHING GOES WRONG
遇到錯誤,先檢查這裡
索引到 length 還繼續取值
最後一個有效索引是 length - 1;一般走訪陣列應寫 i < values.length。測試空陣列與只有一個元素的情況。
switch 印出多個分支
檢查匹配後是否缺少 break,並區分刻意共用 case 與意外落入後續分支。
continue 讓計數永遠不變
逐行追蹤 continue 的目的地。尤其在 while 中,先確保每輪都能更新狀態,或有可達到的 break。
PAUSE AND TRY
先不要急著看別人的寫法
- 把分級成績改成 90、75、60、59,分別會進哪個分支?
- 將第五節的 break 與 continue 條件對調,再改停止數字為 6,會有何差異?
- 用 while 計算 1 到 5 的總和,與 for 版本比對。
先用紙筆預測,再改動範例中的數字或文字。結果與預期不同時,找出最早開始不同的那一步。
把這幾件事帶走
- 條件與邊界先寫成文字,再翻成布林運算式。
- for 管步數,for-each 讀元素,while 管條件。
- 每次遇到 break/continue 都標出它影響的那一層。
FROM READING TO PRACTICE
用三道免費題,練習本章觀念
先做簡單題確認語法,再把幾個步驟組合起來。三題都來自本章主題的 Java 免費題庫,難度表示需要組合的基本概念。
教材來源與 Java 11 對照
本章依據《第二部分 02 Java 流程控制.pdf》PDF 第 2–31 頁整理,將原有觀念重新編寫為可閱讀與執行的網站教學。頁碼為 PDF 檔案頁次;舊版語法說明與已知誤植依 Java 11 修正,補充內容另有標示。
需要查閱更完整的規則時,可參考以下官方文件。