在实际开发过程中,并不是任何情况下都要让循环从始至终全部执行完毕,有时需要对循的执行进行一定程度的控制。Java语言中提供了break和continue两个关键字来控制循环的执行。本小节首先介绍break关键字的使用。
3.7.1 break关键字
在前面几个小节所列举的循环例子中,所有的循环都是从头到尾全部执行完毕。但有的时候,不需要循环全部执行完毕就可以提前结束循环。比如,用循环的方式在一个元素不重复的数组中寻找某个特定的数字,当找到这个数字之后,如果继续向后寻找,数组中一定不会再次出现这个数字,因此可以提前结束循环。
专业上,把提前结束循环的操作称为“中止循环”。需要注意,“中止循环”和“终止循环”并不是一个概念。“中止循环”是指循环没有运行完预定的次数就提前结束,这个操作需要用break关键字来完成。break关键字可以单独构成一条语句,因此当break后面加上分号时,也被称为break语句。虚拟机执行循环语句时遇到break语句,会立刻中止循环,即使本轮循环中还有一部分循环语句没有执行完毕也会如此。【例03_12】演示了在数组中寻找特定元素,并在找到该元素后如何使用break语句中止循环。
【例03_12寻找特定元素】
Exam03_12.java
import java.util.Scanner;
public class Exam03_12 {
public static void main(String[] args) {
int[] array = { 1, 4, 3, 5, 2 };// 由数字1-5构成的乱序无重复的数组
Scanner sc = new Scanner(System.in);
int input;// 用户输入要寻找的数字
System.out.println("请输入1-5中的一个数字");
input = sc.nextInt();
for (int i = 0; i < array.length; i++) {// 以循环的方式寻找特定元素
if (array[i] == input) {// 如果找到
System.out.println(input + "是数组中第" + (i + 1) + "个元素");// 输出其位置
break;// 中止循环
}
}
}
}
在【例03_12】中,array是一个元素不重复且无序的数组,它由数字1-5构成。程序运行后,由用户任意输入1-5中的一个数字,并且通过循环的方式查找这个数字,如果找到该数字后,打印该数字在数组中的位置。因为数组元素不重复,所以找到这个数字后就无需向后继续查找,此时可以中止循环以避免后面无意义的查找操作。需要提醒各位读者,在输出被查找元素的位置时,使用的是i+1而不是i,原因是数组的下标是从0开始的,而普通用户的观念中,计数都从1开始的,所以要用i+1来表示某个元素在数组中的位置。
在嵌套循环结构中,直接使用break语句仅能中止它所在那一层循环,无法中止其外层循环的运行。如果必须要在内层循环中用break语句中止外层循环,需要先给外层循环设定一个名称,并且用在break关键字的后面加上这个名称,通过这样的方式就可以跳出外层循环。给循环设定名称的格式如下:
名称:循环 |
【例03_13】演示了如何使用break语句在内层循环里中止外层循环的执行。
【例03_13中止外层循环】
Exam03_13.java
public class Exam03_13 {
public static void main(String[] args) {
outter: for (int i = 1; i <= 5; i++) {// 给外层循环命名为outter
System.out.println("外层循环第" + i + "次执行");
for (int j = 1; j <= 5; j++) {
if (i == 2 && j == 4) {
break outter;// 中止外层循环
}
System.out.println(" 内层循环第" + j + "次执行");
}
}
}
}
在【例03_13】中有内外两层循环,外层循环被命名为outter。当外层循环变量i的值为2,并且内层循环变量j的值为4的时候,通过“break outter;”这条语句即可中止外层循环。语句中的“outter”就是外层循环的名称。【例03_13】的运行结果为:
外层循环第1次执行
内层循环第1次执行
内层循环第2次执行
内层循环第3次执行
内层循环第4次执行
内层循环第5次执行
外层循环第2次执行
内层循环第1次执行
内层循环第2次执行
内层循环第3次执行
通过运行结果可以看出:外层循环在第2次执行并未全部完成的情况下就被中止。另外,当程序遇到break语句时会立刻中止循环,即使本次循环仍然有未执行的语句也是如此,因此在条件“i==2&&j==4”成立时,虚拟机立刻中止了循环,后面的输出语句并未执行。
在实际开发过程中,不建议各位读者使用这样的方式“跨层”中止循环。因为这样的编程方式容易引起程序的混乱。大家最好还是以“逐层中止”的方式结束各层循环,这样更为稳妥。
3.7.2 continue关键字
有的时候,程序并不需要中止整个循环,而只是需要省略掉本次循环中的某些操作并直接进入下一次循环。Java语言中的continue关键字就能实现这样的效果。continue关键字也可以单独构成一条语句,虚拟机执行循环语句时遇到continue语句,会放弃执行本次循环中剩余的语句并直接进入到下一轮循环中。
假设某公司职员每周工作5天,每天做3件事:1、打卡2、写文案3、开每日总结会议。而每周第2个工作日因领导有其他工作安排,无需开总结会议。这个职员每周的工作就可以用【例03_14】的程序模拟:
【例03_14 5日工作内容】
Exam03_14.java
public class Exam03_14 {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
System.out.println("第" + i + "工作日:");
System.out.println(" 打卡");
System.out.println(" 写文案");
if (i == 2) {
continue;
}
System.out.println(" 开总结会");
}
}
}
【例03_14】的运行结果如下:
第1工作日:
打卡
写文案
开总结会
第2工作日:
打卡
写文案
第3工作日:
打卡
写文案
开总结会
第4工作日:
打卡
写文案
开总结会
第5工作日:
打卡
写文案
开总结会
通过程序运行结果可以看到:在continue语句的作用下,第2工作日的“开总结会议”这个操作被省略掉了,但循环并没有中止,而是直接进入了第3轮。
同break一样,当嵌套循环中出现了continue语句时,它仅能省略执行本层循环中后面的语句。如果希望省略执行外层循环中的语句,也需先对外层循环进行命名,并且在continue之后加上外层循环的名称。在此仍然建议各位读者在实际开发过程中尽量不要“跨层”使用continue语句。
除此文字版教程外,小伙伴们还可以点击这里观看我在本站的视频课程学习Java。
标签:语句,外层,中止,break,关键字,continue,执行,循环 From: https://blog.51cto.com/mugexuetang/5978708