中断嵌套循环

2022-09-02 19:12:01

可能的重复:
如何在双/嵌套循环中从主/外循环中断?

我有以下情况:

      for(int i = 0; i < schiffe.length-1; i++){
            if(schiffe[i].schaden){
                schlepper.fliege(schiffe[i].x, 
                                 schiffe[i].y, 
                                 schiffe[i].z);
                schlepper.wirdAbgeschleppt = schiffe[i];
                for(int k = 0; k < stationen.length-1; k++){
                    if(stationen[k].reparatur == null){
                        schlepper.fliege(stationen[k].x,
                                         stationen[k].y,
                                         stationen[k].z);
                        break;
                    }
                }
            }
        }

我想

schlepper.fliege(stationen[k].x,
                 stationen[k].y,
                 stationen[k].z);

执行一次,然后脱离内部循环,继续执行 for(int i... 循环。所以我在代码中使用了中断。但我真的不确定这是否正确。中断是导致所有循环的中断还是仅导致第二个循环的中断?


答案 1

它只打破内部循环,因此做你想要的。要打破多个级别,在Java中,您可以使用“标记的中断”,如下所示:

schiffe_loop:
for(int i = 0; i < schiffe.length-1; i++){
    some_stuff();
    for(int k = 0; k < stationen.length-1; k++){
        if (something_really_bad_happened()) {
            break schiffe_loop;
        }
    }
}

但通常你不需要这个。

无论如何,您可以考虑为内部循环创建一个单独的方法;这是你可以很容易地给它起一个名字的东西(“find_available_station”或类似的东西),并且可能需要其他地方。

另外,请注意,您现在的循环将错过每个数组的最后一个元素。仔细想想你为什么使用<而不是<=;它正是这样,您就可以使用从0到但不包括指定值的每个值。


答案 2

break将打破最里面的循环,在你的情况下是第二个循环。

要使其中断外部循环,可以使用标记的中断作为:

OUTER:for(...) {
         for(...) {
            break OUTER;
         }
      }

推荐