Java break 和 continue

breakcontinue 用來控制迴圈的執行流程。

break

break 會立即跳出迴圈:

for (int i = 1; i <= 10; i++) {
    if (i == 5) {
        break;  // 當 i 等於 5 時跳出
    }
    System.out.println(i);
}
// 1, 2, 3, 4

continue

continue 會跳過當次迭代,繼續下一次:

for (int i = 1; i <= 10; i++) {
    if (i == 5) {
        continue;  // 跳過 5
    }
    System.out.println(i);
}
// 1, 2, 3, 4, 6, 7, 8, 9, 10

在 while 迴圈中

int i = 0;

while (i < 10) {
    i++;
    if (i == 3) continue;  // 跳過 3
    if (i == 8) break;     // 在 8 停止
    System.out.println(i);
}
// 1, 2, 4, 5, 6, 7

實際應用

搜尋元素

int[] numbers = {10, 25, 30, 45, 50};
int target = 30;
int index = -1;

for (int i = 0; i < numbers.length; i++) {
    if (numbers[i] == target) {
        index = i;
        break;  // 找到就跳出
    }
}

if (index != -1) {
    System.out.println("找到,索引:" + index);  // 找到,索引:2
}

跳過特定值

int[] numbers = {1, -2, 3, -4, 5, -6};
int sum = 0;

for (int num : numbers) {
    if (num < 0) {
        continue;  // 跳過負數
    }
    sum += num;
}

System.out.println("正數總和:" + sum);  // 9

驗證輸入

Scanner scanner = new Scanner(System.in);

while (true) {
    System.out.print("請輸入正整數:");
    
    if (!scanner.hasNextInt()) {
        System.out.println("請輸入數字");
        scanner.next();  // 清除錯誤輸入
        continue;
    }
    
    int num = scanner.nextInt();
    
    if (num <= 0) {
        System.out.println("請輸入正數");
        continue;
    }
    
    System.out.println("你輸入了:" + num);
    break;  // 輸入正確,跳出
}

巢狀迴圈中的 break

break 只會跳出最內層的迴圈:

for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= 3; j++) {
        if (j == 2) {
            break;  // 只跳出內層迴圈
        }
        System.out.println("i=" + i + ", j=" + j);
    }
}
// i=1, j=1
// i=2, j=1
// i=3, j=1

標籤 break 和 continue

使用標籤可以跳出外層迴圈:

outer:
for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= 3; j++) {
        if (i == 2 && j == 2) {
            break outer;  // 跳出外層迴圈
        }
        System.out.println("i=" + i + ", j=" + j);
    }
}
// i=1, j=1
// i=1, j=2
// i=1, j=3
// i=2, j=1

標籤 continue

outer:
for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= 3; j++) {
        if (j == 2) {
            continue outer;  // 跳到外層迴圈的下一次迭代
        }
        System.out.println("i=" + i + ", j=" + j);
    }
}
// i=1, j=1
// i=2, j=1
// i=3, j=1

搜尋二維陣列

int[][] matrix = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};
int target = 5;
boolean found = false;

search:
for (int i = 0; i < matrix.length; i++) {
    for (int j = 0; j < matrix[i].length; j++) {
        if (matrix[i][j] == target) {
            System.out.println("找到!位置:[" + i + "][" + j + "]");
            found = true;
            break search;
        }
    }
}

if (!found) {
    System.out.println("找不到");
}

switch 中的 break

break 也用於 switch 敘述:

int day = 3;

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

break vs return

敘述作用
break跳出迴圈或 switch
continue跳過當次迭代
return結束整個方法
public void search(int[] arr, int target) {
    for (int num : arr) {
        if (num == target) {
            System.out.println("找到了");
            return;  // 結束方法
        }
    }
    System.out.println("找不到");
}

最佳實踐

  • 避免過度使用 break 和 continue,可能降低可讀性
  • 考慮使用提前返回 (early return) 代替 break
  • 標籤 break/continue 謹慎使用,考慮重構為方法