熙熙

Java 嵌套循环之跳出多层循环

例:有以下程序,输出 0-99,两个数值间使用空格分隔,每 10 个数一行,每行用 ---- 分隔,代码:

public class Test {
    public static void main(String []args) {
        for(int i = 0; i < 10; i++){
            for(int j = 0; j < 10; j++){
                System.out.print("" + i + j +"  ");
            }
            System.out.println("\n -------------------------------------- \n");
        }
        System.out.println("输出完毕!");
    }
}

输出:

00  01  02  03  04  05  06  07  08  09  
 -------------------------------------- 

10  11  12  13  14  15  16  17  18  19  
 -------------------------------------- 

20  21  22  23  24  25  26  27  28  29  
 -------------------------------------- 

30  31  32  33  34  35  36  37  38  39  
 -------------------------------------- 

40  41  42  43  44  45  46  47  48  49  
 -------------------------------------- 

50  51  52  53  54  55  56  57  58  59  
 -------------------------------------- 

60  61  62  63  64  65  66  67  68  69  
 -------------------------------------- 

70  71  72  73  74  75  76  77  78  79  
 -------------------------------------- 

80  81  82  83  84  85  86  87  88  89  
 -------------------------------------- 

90  91  92  93  94  95  96  97  98  99  
 -------------------------------------- 

输出完毕!

题目要求在不修改循环结构的情况下使输出结果变成输出 0-29:

00  01  02  03  04  05  06  07  08  09  
 -------------------------------------- 

10  11  12  13  14  15  16  17  18  19  
 -------------------------------------- 

20  21  22  23  24  25  26  27  28  29  
 -------------------------------------- 

输出完毕!

根据题意我们一般情况下首先会想到直接判断当大于 29 的时候就跳出循环就是了。

代码如下:

public class Test {
    public static void main(String []args) {
        for(int i = 0; i < 10; i++){
            for(int j = 0; j < 10; j++){
                if(i * 10 + j > 29){
                    break;
                }
                System.out.print("" + i + j +"  ");
            }
            System.out.println("\n -------------------------------------- \n");
        }
        System.out.println("输出完毕!");
    }
}

输出:

00  01  02  03  04  05  06  07  08  09  
 -------------------------------------- 

10  11  12  13  14  15  16  17  18  19  
 -------------------------------------- 

20  21  22  23  24  25  26  27  28  29  
 -------------------------------------- 


 -------------------------------------- 


 -------------------------------------- 


 -------------------------------------- 


 -------------------------------------- 


 -------------------------------------- 


 -------------------------------------- 


 -------------------------------------- 

输出完毕!

看输出结果确实达到了只是输出 0-29,但是你会发现和题目要求的输出结果是不一样的,后面多出了很多分隔线条,那是因为跳出循环体的语句 break 只能跳出当前语句的上一层循环。

这时我们需要想办法让他跳出多层循环。

修改后代码如下:

public class Test {
    public static void main(String []args) {
        lable:
        for(int i = 0; i < 10; i++){
            for(int j = 0; j < 10; j++){
                if(i * 10 + j > 29){
                    break lable;
                }
                System.out.print("" + i + j +"  ");
            }
            System.out.println("\n -------------------------------------- \n");
        }
        System.out.println("输出完毕!");
    }
}

输出:

00  01  02  03  04  05  06  07  08  09  
 -------------------------------------- 

10  11  12  13  14  15  16  17  18  19  
 -------------------------------------- 

20  21  22  23  24  25  26  27  28  29  
 -------------------------------------- 

输出完毕!

我们在第 3 行定义了一个标记 标记名是 lable。

然后在第 7 行的跳出循环语句中使用 break lable 跳出到 lable 标记的循环外面。