• 第三章《数组与循环》第7节:break与continue关键字


    在实际开发过程中,并不是任何情况下都要让循环从始至终全部执行完毕,有时需要对循的执行进行一定程度的控制。Java语言中提供了break和continue两个关键字来控制循环的执行。本小节首先介绍break关键字的使用。

    3.7.1 break关键字

    在前面几个小节所列举的循环例子中,所有的循环都是从头到尾全部执行完毕。但有的时候,不需要循环全部执行完毕就可以提前结束循环。比如,用循环的方式在一个元素不重复的数组中寻找某个特定的数字,当找到这个数字之后,如果继续向后寻找,数组中一定不会再次出现这个数字,因此可以提前结束循环。

    专业上,把提前结束循环的操作称为“中止循环”。需要注意,“中止循环”和“终止循环”并不是一个概念。“中止循环”是指循环没有运行完预定的次数就提前结束,这个操作需要用break关键字来完成。break关键字可以单独构成一条语句,因此当break后面加上分号时,也被称为break语句。虚拟机执行循环语句时遇到break语句,会立刻中止循环,即使本轮循环中还有一部分循环语句没有执行完毕也会如此。【例03_12】演示了在数组中寻找特定元素,并在找到该元素后如何使用break语句中止循环。

    【例03_12 寻找特定元素】

    Exam03_12.java

    1. import java.util.Scanner;
    2. public class Exam03_12 {
    3. public static void main(String[] args) {
    4. int[] array = { 1, 4, 3, 5, 2 };// 由数字1-5构成的乱序无重复的数组
    5. Scanner sc = new Scanner(System.in);
    6. int input;// 用户输入要寻找的数字
    7. System.out.println("请输入1-5中的一个数字");
    8. input = sc.nextInt();
    9. for (int i = 0; i < array.length; i++) {// 以循环的方式寻找特定元素
    10. if (array[i] == input) {// 如果找到
    11. System.out.println(input + "是数组中第" + (i + 1) + "个元素");// 输出其位置
    12. break;// 中止循环
    13. }
    14. }
    15. }
    16. }

    在【例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

    1. public class Exam03_13 {
    2. public static void main(String[] args) {
    3. outter: for (int i = 1; i <= 5; i++) {// 给外层循环命名为outter
    4. System.out.println("外层循环第" + i + "次执行");
    5. for (int j = 1; j <= 5; j++) {
    6. if (i == 2 && j == 4) {
    7. break outter;// 中止外层循环
    8. }
    9. System.out.println(" 内层循环第" + j + "次执行");
    10. }
    11. }
    12. }
    13. }

    在【例03_13】中有内外两层循环,外层循环被命名为outter。当外层循环变量i的值为2,并且内层循环变量j的值为4的时候,通过“break outter;”这条语句即可中止外层循环。语句中的“outter”就是外层循环的名称。【例03_13】的运行结果为:

    1. 外层循环第1次执行
    2.     内层循环第1次执行
    3.     内层循环第2次执行
    4.     内层循环第3次执行
    5.     内层循环第4次执行
    6.     内层循环第5次执行
    7. 外层循环第2次执行
    8.     内层循环第1次执行
    9.     内层循环第2次执行
    10.     内层循环第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

    1. public class Exam03_14 {
    2. public static void main(String[] args) {
    3. for (int i = 1; i <= 5; i++) {
    4. System.out.println("第" + i + "工作日:");
    5. System.out.println(" 打卡");
    6. System.out.println(" 写文案");
    7. if (i == 2) {
    8. continue;
    9. }
    10. System.out.println(" 开总结会");
    11. }
    12. }
    13. }

    【例03_14】的运行结果如下:

    1. 1工作日:
    2.     打卡
    3.     写文案
    4.     开总结会
    5. 2工作日:
    6.     打卡
    7.     写文案
    8. 3工作日:
    9.     打卡
    10.     写文案
    11.     开总结会
    12. 4工作日:
    13.     打卡
    14.     写文案
    15.     开总结会
    16. 5工作日:
    17.     打卡
    18.     写文案
    19.     开总结会

    通过程序运行结果可以看到:在continue语句的作用下,第2工作日的“开总结会议”这个操作被省略掉了,但循环并没有中止,而是直接进入了第3轮。

    同break一样,当嵌套循环中出现了continue语句时,它仅能省略执行本层循环中后面的语句。如果希望省略执行外层循环中的语句,也需先对外层循环进行命名,并且在continue之后加上外层循环的名称。在此仍然建议各位读者在实际开发过程中尽量不要“跨层”使用continue语句。

    除阅读文章外,各位小伙伴还可以点击这里观看我在本站的视频课程学习Java!

  • 相关阅读:
    ipv4 网络划分,网络段与子网掩码
    阿里言:出乎意料,“字节跳动”居然是这么做数据迁移的
    【Linux】进程替换|exec系列函数
    【智能电网随机调度】智能电网的双层模型时间尺度随机优化调度(Matlab代码实现)
    48、线程
    SMTP协议解读以及如何使用SMTP协议发送电子邮件
    全真模拟题!PMP提分必练
    SpingCloud整合Consul实现服务注册并访问
    vue开发环境搭建部署(mac版)
    python常用标准库(os系统模块、shutil文件操作模块)
  • 原文地址:https://blog.csdn.net/shalimu/article/details/128004140