打破嵌套for循环

Upv*_*ote 17 java loops for-loop break labelled-break

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

我有以下情况:

      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;
                    }
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

我想要

schlepper.fliege(stationen[k].x,
                 stationen[k].y,
                 stationen[k].z);
Run Code Online (Sandbox Code Playgroud)

执行一次,然后突破内部循环并继续使用for(int i ...循环.所以我在代码中使用了一个中断.但我不确定这是否正确.中断是否会导致中断对于所有循环或仅用于第二个循环?

Kar*_*tel 43

它只打破内循环,因此做你想要的.要在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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但通常你不需要这个.

你可以考虑为内环做一个单独的方法; 这是你可以很容易地给出一个名字的东西("find_available_station"或类似的东西),并且可能需要其他地方.

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


cod*_*ict 6

break 将破坏最内层循环,在你的情况下第二循环.

为了打破外部循环,您可以使用带标签的中断:

OUTER:for(...) {
         for(...) {
            break OUTER;
         }
      }
Run Code Online (Sandbox Code Playgroud)