循环控制
循环控制包含两方面的内容,一方面是控制循环变量的变化方式,另一方面是控制循环的跳转。控制循环的跳转需要使用 break 和 continue 两个关键字,这两条跳转语句的跳转效果不同,break 语句是中断循环,continue 语句是执行下一次循环。
break语句
使用 break 语句可以跳出 switch 结构。在循环结构中,同样也可用 break 语句跳出当前循环体,从而中断当前循环。
在 3 种循环语句中使用 break 语句的形式如图4.16所示。

【例4.10】输出1~20出现的第一个偶数(实例位置:资源包\TM\sl\4\10)
创建 BreakTest 类,循环输出1~20的偶数值,在遇到第一个偶数时,使用 break 语句结束循环。
public class BreakTest {
public static void main(String[] args) {
for (int i = 1; i < 20; i++) { // 如果i是偶数
if (i % 2 == 0) { // 如果i是偶数
System.out.println(i); // 输出i的值
break; // 跳到下一循环
}
}
System.out.println("---end---"); // 结束时输出一行文字
}
}
运行结果如下:
2
---end---
在循环嵌套情况下,break 语句将只会使程序流程跳出包含它的最内层的循环结构,即只跳出一层循环。 如果想让 break 跳出外层循环,Java 提供了 “标签” 的功能,语法如下:
|
-
标签名:任意标识符。
-
循环体:任意循环语句。
-
break 标签名:break 跳出指定的循环体,此循环体的标签名必须与 break 的标签名一致。
带有标签的 break 可以指定跳出的循环,这个循环可以是内层循环,也可以是外层循环。
【例4.11】使用标签让break结束外层循环(实例位置:资源包\TM\sl\4\11)
创建 BreakInsideNested 类,在该类中写两层 for 循环,第一层 for 语句循环 3 次,第二层 for 语句循环 5 次。当第二层 for 语句循环至第 4 次时,强行用 break 中断循环。输出程序执行时外层循环和内层循环各循环了多少次。
public class BreakInsideNested {
public static void main(String[] args) {
Loop: for (int i = 1; i <= 3; i++) {// 外层循环,添加了标签
for (int j = 1; j <= 5; j++) {// 内层循环
if (j == 4) { // 内层循环至第4次时就结束
break Loop;// 结束指定位置的循环
}
System.out.println("i=" + i + " j=" + j);
}
}
}
}
运行结果如下:
i=1 j=1
i=1 j=2
i=1 j=3
i=2 j=1
i=2 j=2
i=2 j=3
i=3 j=1
i=3 j=2
i=3 j=3
从这个运行结果中可以看到以下内容。
-
循环中的 if 语句判断:当 j 等于 4 时,执行 break 语句,中断了内层的循环,所以输出的 j 值最大到 3 为止。
-
外层的循环没有受任何影响,输出的 i 值最大为 3,正是 for 循环设定的最大值。
现在修改这段代码,给外层循环添加一个名为 Loop 的标签,让内层循环结束外层循环,再查看运行结果。
public class BreakInsideNested2 {
public static void main(String[] args) {
for (int i = 1; i <= 3; i++) {// 外层循环
for (int j = 1; j <= 5; j++) {// 内层循环
if (j == 4) { // 内层循环至第4次时就结束
break;
}
System.out.println("i=" + i + " j=" + j);
}
}
}
}
运行结果如下:
i=1 j=1
i=1 j=2
i=1 j=3
从这个结果中可以看出,当 j 的值等于 4 时,直接结束外层循环,i 的值不再增加。
continue语句
continue 语句是针对 break 语句的补充。continue 不是立即跳出循环体,而是跳过本次循环,回到循环的条件测试部分,重新开始执行循环。在 for 循环语句中遇到 continue 后,首先执行循环的增量部分,然后进行条件测试。在 while 和 do…while 循环中,continue 语句使控制直接回到条件测试部分。
在 3 种循环语句中,使用 continue 语句的形式如图4.17所示。

【例4.12】输出1~20的奇数(实例位置:资源包\TM\sl\4\12)
创建 ContinueTest 类,编写一个 for 循环从 1 循环至 20,如果当前循环的次数为偶数,则使用 continue 语句跳过循环。
public class ContinueTest {
public static void main(String[] args) {
for (int i = 1; i <= 20; i++) {
if (i % 2 == 0) { // 如果i是偶数
continue; // 跳到下一循环
}
System.out.println(i); // 输出i的值
}
}
}
运行结果如下:
1
3
5
7
9
11
13
15
17
19
与 break 语句一样,continue 也支持标签功能,语法如下:
标签名 : 循环体{
continue标签名;
}
-
标签名:任意标识符。
-
循环体:任意循环语句。
-
continue 标签名:continue 跳出指定的循环体,此循环体的标签名必须与 continue 的标签名一致。
编程训练(答案位置:资源包\TM\sl\4\编程训练)
【训练5】蜗牛爬井 有一口井,深10米,一只蜗牛从井底向井口爬,白天向上爬2米,晚上向下滑1米,问多少天可以爬到井口?
【训练6】剧院售票 某剧院发售演出门票,演播厅观众席有4行,每行有10个座位。为了不影响观众视角,在发售门票时,屏蔽掉最左一列和最右一列的座位。请编写程序,结合本节知识点模拟整个售票过程。