Java break 和 continue
break 和 continue 用來控制迴圈的執行流程。
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 謹慎使用,考慮重構為方法