zoukankan      html  css  js  c++  java
  • Java 如何跳出多重嵌套循环体?

    1. 在最外层循环语句前定义一个标号,循环体内任意位置都可以使用带有标号的break语句跳出外层循环,结束整个循环。

            System.out.println("MainClass1 Start...");
            
            ko:
            for (int i = 0; i < 10; i++) {
                for (int j = 0; j < 10; j++) {
                    System.out.println("i=" + i + ",j=" + j);
                    if (j == 5)
                        break ko;
                }
            }
            
            System.out.println("MainClass1 End.");

    运行结果:

    MainClass1 Start...
    i=0,j=0
    i=0,j=1
    i=0,j=2
    i=0,j=3
    i=0,j=4
    i=0,j=5
    MainClass1 End.

    注:标号一定是加在循环体前面,不能放在带标号break语句所在的循环体之后;break+标号有点像goto语句,如果循环体包含的代码片太长,且嵌套多层循环使用了多个标号,会导致代码不易读。

    2. 使用boolean变量做flag,作为外层循环体结束的条件,赋予变量带有业务意义的名字。

            System.out.println("MainClass1 Start...");
            int arr[][] = { { 1, 2, 3 }, { 4, 5, 6, 7 }, { 9 } };
            boolean found = false;
    
            for (int i = 0; i < arr.length && !found; i++) {
                for (int j = 0; j < arr[i].length; j++) {
                    System.out.println("i=" + i + ",j=" + j);
                    if (arr[i][j] == 5) {
                        found = true;
                        break;
                    }
                }
            }
            System.out.println("MainClass1 End.");

    运行结果:

    MainClass1 Start...
    i=0,j=0
    i=0,j=1
    i=0,j=2
    i=1,j=0
    i=1,j=1
    MainClass1 End.

    注:这个办法看起来易读一些,个人感觉比第1个好,如果很多层的嵌套循环,需要在外面每一层都加上这个flag作为结束条件。

    当然,我相信还有更好的更实用的办法,你有你牛逼,有就贴出来吧。

  • 相关阅读:
    MySQL缓存的查询和清除命令使用详解
    Mysql索引学习笔记
    Java使用BufferedImage修改图片内容
    Vue.js学习
    Linux一键安装宝塔控制面板
    SpringAop注解实现日志的存储
    Spring + SpringMVC + Mybatis项目中redis的配置及使用
    Java 常见异常种类
    6.28笔记-servlet3.0注解配置、文件上传、过滤器、监听器
    6.27-JSTL、标签、分页
  • 原文地址:https://www.cnblogs.com/twzheng/p/5609080.html
Copyright © 2011-2022 走看看