3.4 break 与 continue
break 和 continue 都会改变循环的正常执行流程,但它们的含义不同。
break:直接结束当前循环。
continue:跳过本轮迭代(iteration)的剩余代码,开始下一轮循环。
break
当循环中已经完成目标,或者继续循环没有意义时,可以使用 break。
下面的程序判断一个整数是否为素数(prime number)。只要找到一个能整除 n 的数,就可以确认 n 不是素数,不需要再继续检查。
java
Scanner input = new Scanner(System.in);
int n = input.nextInt();
boolean isPrime = n > 1;
for (int i = 2; i <= (int) Math.sqrt(n); i++) {
if (n % i == 0) {
isPrime = false;
break;
}
}
if (isPrime) {
System.out.printf("%d 是素数%n", n);
} else {
System.out.printf("%d 不是素数%n", n);
}一次可能的运行结果:
text
17
17 是素数这里不需要检查到 n - 1。如果一个数有大于平方根(square root)的因子,那么它一定也有一个小于平方根的配对因子,所以检查到 sqrt(n) 就够了。
正在加载概念检查...
continue
continue 不会结束整个循环,而是跳过本轮循环中剩下的代码,直接进入下一轮。
下面的程序读取 10 个整数,只计算非负整数的平方和。遇到负数时,本轮直接跳过。
java
Scanner input = new Scanner(System.in);
int n = 10;
int sumSquare = 0;
for (int i = 0; i < n; i++) {
int num = input.nextInt();
if (num < 0) {
continue;
}
sumSquare += num * num;
}
System.out.printf("非负整数平方和:%d%n", sumSquare);当 num < 0 时,continue 会跳过 sumSquare += num * num,因此负数不会参与计算。
注意
0 不是负数,它的平方是 0,加入结果也不会改变总和。正在加载概念检查...
如何选择
如果你想“整个循环到此为止”,用 break。如果你只是想“这一轮不继续做了,下一轮照常开始”,用 continue。
java
for (int x = 1; x <= 5; x++) {
if (x == 3) {
continue;
}
System.out.println(x);
}运行结果:
text
1
2
4
53 被跳过了,但循环没有结束。
正在加载概念检查...
正在加载本节练习...
对比实验
读完 break 和 continue 的含义后,再用下面的组件单步比较:同样遇到 x == 3,continue 只是跳过本轮,而 break 会让整个循环提前结束。
正在加载交互实验...