杰瑞科技汇

Java中continue的用法有哪些?

continue 是一个控制流语句,它的作用是立即终止当前正在执行的循环迭代,并跳转到循环的“更新”部分,然后开始下一次迭代

Java中continue的用法有哪些?-图1
(图片来源网络,侵删)

continue 就像在循环中说:“这次循环剩下的代码不执行了,直接开始下一次循环吧!”


continue 的基本工作原理

continue 只能用在循环语句中,包括 for 循环、while 循环和 do-while 循环。

当程序执行到 continue 时:

  1. 跳过:当前循环体中 continue 语句之后的所有代码。
  2. 继续:循环的迭代变量会更新(在 for 循环中),然后循环的条件会重新被判断,如果条件为真,则开始下一次循环;如果为假,则循环结束。

continue 在不同循环中的具体行为

a) 在 for 循环中

for 循环中,continue 会跳过循环体剩余代码,然后执行 for 循环的 i++(或更新表达式),再判断条件。

Java中continue的用法有哪些?-图2
(图片来源网络,侵删)

示例: 打印 1 到 10 之间除了 5 以外的所有数字。

public class ContinueForExample {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            // i 等于 5,就跳过本次循环的剩余部分
            if (i == 5) {
                continue;
            }
            // 这行代码在 i == 5 时不会被执行
            System.out.println("当前数字是: " + i);
        }
    }
}

执行流程分析:

  1. i 从 1 到 4,if 条件为假,System.out.println 正常执行。
  2. i 变为 5 时,if (i == 5) 为真,执行 continue
  3. 程序立即跳过 System.out.println(...) 这一行。
  4. 程序跳转到 for 循环的 i++ 部分,i 变为 6。
  5. 循环继续,直到 i 变为 11,循环结束。

输出结果:

当前数字是: 1
当前数字是: 2
当前数字是: 3
当前数字是: 4
当前数字是: 6
当前数字是: 7
当前数字是: 8
当前数字是: 9
当前数字是: 10

b) 在 whiledo-while 循环中

whiledo-while 循环中,continue 会跳过循环体剩余代码,然后直接跳转到循环条件的判断部分。

Java中continue的用法有哪些?-图3
(图片来源网络,侵删)

示例: 使用 while 循环,打印 1 到 10 之间除了 5 以外的所有数字。

public class ContinueWhileExample {
    public static void main(String[] args) {
        int i = 1;
        while (i <= 10) {
            if (i == 5) {
                i++; // 注意:必须在这里增加 i,否则会造成死循环!
                continue;
            }
            System.out.println("当前数字是: " + i);
            i++;
        }
    }
}

⚠️ 重要警告:whiledo-while 循环中使用 continue 时要非常小心!因为 continue 会直接跳转到条件判断,如果循环变量的更新在 continue 之后,就可能导致死循环

错误示例:

int i = 1;
while (i <= 10) {
    if (i == 5) {
        continue; // 错误!i 永远不会增加,会一直等于 5,导致死循环
    }
    System.out.println("当前数字是: " + i);
    i++;
}

在上面的错误代码中,当 i 变为 5 时,continue 被执行,程序跳转到 while (i <= 10) 的判断,由于 i 仍然是 5,条件为真,再次进入循环体,又一次执行 continue,无限循环下去。

正确做法:确保在 continue 之前,或者在 continue 跳转到的位置(即循环条件判断之前)更新循环变量,如上面的正确示例所示,我们在 continue 之前手动增加了 i


带标签的 continue (Labeled `continue)

当 Java 程序中存在嵌套循环时,普通的 continue 只能跳出它所在的那一层循环,如果你想要直接跳出多层循环,可以使用带标签的 continue

语法:

label_name:
for (...) {
    for (...) {
        if (condition) {
            continue label_name; // 跳转到 label_name 所在的循环,开始下一次迭代
        }
    }
}

示例: 在一个二维数组中查找第一个负数,找到后就停止整个搜索过程。

public class LabeledContinueExample {
    public static void main(String[] args) {
        int[][] matrix = {
            {1, 2, 3},
            {4, 5, 6},
            {7, -8, 9},
            {10, 11, 12}
        };
        boolean found = false;
        // outer 是外层循环的标签
        outer:
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                if (matrix[i][j] < 0) {
                    System.out.println("在位置 [" + i + "][" + j + "] 找到第一个负数: " + matrix[i][j]);
                    found = true;
                    // 使用带标签的 continue,直接跳出外层循环的下一次迭代
                    // 实际上这里用 break 更合适,但为了演示 continue,我们这么用
                    // 它会结束当前外层循环的本次迭代,i++,进入下一次外层循环
                    // 如果想完全终止所有循环,应该用 break outer;
                    continue outer; 
                }
                System.out.println("检查了元素: " + matrix[i][j]);
            }
            System.out.println("--- 第 " + i + " 行检查完毕 ---");
        }
        if (!found) {
            System.out.println("数组中没有找到负数。");
        }
    }
}

输出结果:

检查了元素: 1
检查了元素: 2
检查了元素: 3
--- 第 0 行检查完毕 ---
检查了元素: 4
检查了元素: 5
检查了元素: 6
--- 第 1 行检查完毕 ---
在位置 [2][1] 找到第一个负数: -8
检查了元素: 10
检查了元素: 11
检查了元素: 12
--- 第 3 行检查完毕 ---

在这个例子中,continue outer; 使得程序在找到 -8 后,直接跳转到外层循环的 i++ 部分,然后开始下一次外层循环(即 i 变为 3,遍历第四行),它并没有完全终止整个程序,只是提前结束了当前外层循环的本次迭代。

注意: 在上面的场景中,使用 break outer; 来完全终止所有循环会是更常见和更清晰的选择。continue 的主要用途是“跳过本次迭代”,而不是“终止循环”。


continue vs. break

初学者很容易混淆 continuebreak,这里做一个清晰的对比:

特性 continue break
作用 跳过当前循环的剩余部分,直接进入下一次迭代。 完全终止跳出当前所在的循环。
位置 只能在循环 (for, while, do-while) 内部使用。 可以在 switch 语句或循环内部使用。
对循环的影响 循环继续执行,只是当前次迭代提前结束。 循环完全终止,不再执行后续任何迭代。
带标签 可以和标签一起使用,跳转到指定标签的循环的下一次迭代。 可以和标签一起使用,跳出指定标签的循环。

一个简单的类比: 想象你在排队买咖啡。

  • break 就是你买完咖啡后,觉得队伍太长,决定不买了,直接离开队伍回家。
  • continue 就是你排到一半,突然发现忘带钱包了,你跟前面的人说“不好意思,我出去一下,马上回来”,然后你跑出队伍去拿钱包,然后再回来排到原来的位置继续排队。

最佳实践和注意事项

  1. 谨慎使用:过度使用 continue 会使代码逻辑变得难以理解和追踪,尤其是在复杂的嵌套循环中,有时,使用 if-else 结构会让代码更清晰。
    • 不推荐(过多使用 continue):
      for (int i = 0; i < 10; i++) {
          if (i % 2 == 0) {
              continue;
          }
          // do something for odd numbers
      }
    • 推荐(更清晰的 if-else):
      for (int i = 0; i < 10; i++) {
          if (i % 2 != 0) { // 只对奇数执行操作
              // do something for odd numbers
          }
      }
  2. 注意 while/do-while 循环中的死循环:如前所述,在 whiledo-while 循环中,确保循环变量的更新不会被 continue 跳过。
  3. continuefor-each 循环中:在 for-each 循环中,continue 的行为和普通的 for 循环一样,它会跳过当前迭代的剩余代码,并自动移动到集合/数组的下一个元素,你不需要担心索引更新的问题。

continue 是 Java 中一个有用的控制流工具,它的核心功能是提前结束当前循环迭代

  • 基本用法:在循环体内使用,跳过剩余代码,进入下一次迭代。
  • for 循环:安全,会自动执行 i++
  • while/do-while 循环:需小心,要确保循环变量能被更新,否则可能导致死循环。
  • 带标签的 continue:用于嵌套循环,可以跳转到外层循环的下一次迭代。
  • break 的区别continue 是“跳过本次”,break 是“跳出整个循环”。

理解并正确使用 continue 可以帮助你写出更简洁、更高效的循环代码,但切记不要滥用,保持代码的可读性永远是第一位的。

分享:
扫描分享到社交APP
上一篇
下一篇