在任何迭代语句的主体部分,都可以使用 break 和 continue 来控制循环流程。break 会直接退出循环,不再执行循环里的剩余语句。continue 则会停止执行当前的迭代,然后退回循环开始位置执行下一次迭代。
下面是一个在 for 和 while 循环中使用 break 和 continue 的例子:
// control/BreakAndContinue.java
// break和continue关键字
import static onjava.Range.*;
public class BreakAndContinue {
public static void main(String[] args) {
for(int i = 0; i < 100; i++) { // [1]
if(i == 74) break; // 跳出for循环
if(i % 9 != 0) continue; // 下次迭代
System.out.print(i + " ");
}
System.out.println();
// 使用for-in:
for(int i : range(100)) { // [2]
if(i == 74) break; // 跳出for循环
if(i % 9 != 0) continue; // 下次迭代
System.out.print(i + " ");
}
System.out.println();
int i = 0;
// 一个“无限循环”:
while(true) { // [3]
i++;
int j = i * 27;
if(j == 1269) break; // 跳出循环
if(i % 10 != 0) continue; // 调到循环顶部
System.out.print(i + " ");
}
}
}
/* 输出:
0 9 18 27 36 45 54 63 72
0 9 18 27 36 45 54 63 72
10 20 30 40
*/
[1] i 的值永远不会达到 100,这是因为一旦 i 等于 74,break 语句就会中断循环。通常只有在不知道中断条件何时发生时,才会这样使用 break。只要 i 不能被 9 整除,continue 语句就会返回到循环的开头再继续执行(因此这会让 i 值增加)。如果能够整除,值就被打印出来。
[2] for-in 语句产生了相同的结果。
[3] 这个 “无限” 的 while 循环会一直执行,因为它的条件表达式结果总是 true,不过 break 语句会中止循环。注意代码里的 continue 语句只是把执行流程移到了循环的开头,而没有执行 continue 之后的任何内容,因此 i 值只有被 10 整除时才会打印。输出结果中之所以显示 0,是因为 0%9 等于 0。
无限循环的另一种形式是 for(;;)。编译器同等对待 while(true) 和 for(;;),所以具体选用哪个取决于你的编程习惯。