int j = 1;
int i = Integer.parseInt(source.getProperty("起始行")) - 1;
int lastnum = getNum(source.getProperty("fileName"));
for (int k = 0; k < conditions.length; k++) {
switch (conditions[k]) {
case "1":
for (; i < lastnum; i++) { /* 處理邏輯 */ }
// 缺少 break!
case "2":
for (; i < lastnum; i++) { /* 處理邏輯 */ }
// 缺少 break!
default:
break;
}
}
Java switch 默認會「穿透」執行後續 case,直到遇到 break 或結束。代碼中 case "1" 無 break,執行完畢直接進入 case "2"。
i 未重置:第二輪循環直接跳出case "1" 的 for (; i < lastnum; i++) 結束時,i == lastnum。case "2" 時,同樣使用 for (; i < lastnum; i++),條件 i < lastnum 為 false,循環體零次執行。for (int k = 0; k < conditions.length; k++) {
// 每次 switch 前重置 i 為初始值
int currentI = Integer.parseInt(source.getProperty("起始行")) - 1;
switch (conditions[k]) {
case "1":
for (; currentI < lastnum; currentI++) { /* ... */ }
break; // 必須 break
case "2":
for (; currentI < lastnum; currentI++) { /* ... */ }
break;
default:
break;
}
}
private void processCondition(String condition, int startRow, int lastRow) {
switch (condition) {
case "1": handleType1(startRow, lastRow); break;
case "2": handleType2(startRow, lastRow); break;
}
}
// fall through 註釋),每個 case 必須以 break 結尾。Case 2 未執行是「缺失 break 導致穿透」與「循環變量未重置導致條件失效」共同作用的結果。修復核心:加 break、隔離變量。長遠看,重構為面向對象設計更能從根源消除此類流程控制錯誤。