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 版权协议,转载请附上原文出处链接和本声明。