Java内部循环中断外部循环

这两天看《Java编程思想》,看到一个比较少见的但感觉有用的点,在这里记录一下:

Java 中没有 goto 语句进行任意跳转,但是 Java 有一种跟 goto 相似的跳转,也是通过标签,但只能针对循环使用。

使用方式:

label1:
outer-iteration {
	inner-iteration {
		//...
		break;            //(1)
		//...
		continue;       //(2)
		//...
		continue label1;     //(3)
		//...
		break label1;    //(4)
	}
}

在 (1) 中,break 中断内部循环,回到外部循环。
在 (2) 中,continue 使执行点移回内部迭代的起始处。
在 (3) 中,continue label1 同时中断内部循环以及外部循环,直接转到 label1 处,随后继续循环。
在 (4) 中,break label1 同时中断内部循环以及外部循环,直接转到 label1 处,但不重新进入迭代。

下面是一个例子:

public class Main {
    public static void main(String[] args) {
        int i = 0;
        outer:
        for (;true; System.out.println("外循环一次")) {
            inner:
            for (; i < 10 ; i++) {
                System.out.println("i = " + i);
                if(i == 2){
                    System.out.println("continue");
                    continue ;
                }
                if(i == 3){
                    System.out.println("break");
                    i++;
                    break ;
                }
                if(i == 7){
                    System.out.println("continue outer");
                    i++;
                    continue outer;
                }
                if(i == 8){
                    System.out.println("break outer");
                    break outer;
                }
                for (int j = 0; j < 5; j++) {
                    if(j == 3){
                        System.out.println("continue inner");
                        continue inner;
                    }
                }
            }
        }
    }
}

输出结果:

i = 0
continue inner
i = 1
continue inner
i = 2
continue
i = 3
break
外循环一次
i = 4
continue inner
i = 5
continue inner
i = 6
continue inner
i = 7
continue outer
外循环一次
i = 8
break outer

我们可以看到,inner 的循环中,每次都会输出 i ,并会进入最下方的循环;
当 j = 3 时,继续 inner 循环;
当 i = 2时,他执行了 continue ,没进入最下方的关于 j 的循环;
当 i = 3 时,执行了 break ,终止了当前循环,回到 outer 循环之中,然后又重新进入 inner 循环;
当 i = 7 时,执行 continue outer ,他会中断当前循环,直接跳转到外部循环,执行 outer 的 for 循环的System.out.println("外循环一次")后,重新进入 inner 循环,但需要注意的是,他没有执行 inner 的 for 循环的 i++,需要我们手动执行一次 i++ ,否则就会死循环;
当 i = 8 时,执行 break label1 ,他中断了 inner 循环和 outer 循环,使得整个循环结束。

 
该标签跳转的方式也适用于 while 循环。


版权声明:本文为stdio_54456153原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>