打破嵌套for循环

时间:2010-12-02 06:36:35

标签: java loops for-loop break labelled-break

  

可能重复:
  How to Break from main/outer loop in a double/nested loop?

我有以下情况:

      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 ...循环。所以我在代码中使用了一个中断。但我不确定这是否正确。是否中断导致所有循环中断或仅针对第二个循环?

10 个答案:

答案 0 :(得分:42)

它只打破内循环,因此做你想要的。要在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”或类似的东西),并可能需要其他地方。

此外,请注意,您现在的循环将错过每个数组的最后一个元素。仔细想想你使用的原因&lt;而不是&lt; =;这正是你使用从0到的每个值,但不包括指定的值。

答案 1 :(得分:5)

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

要使其破坏外部循环,您可以使用标记的中断:

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

答案 2 :(得分:3)

break只会突破最里面的循环。

答案 3 :(得分:1)

break会导致最近的循环中断(第二个循环)

答案 4 :(得分:1)

只是第二个。你当然可以使用“转到”。

答案 5 :(得分:1)

Break语句终止最接近的封闭循环或switch语句,在该语句中它以多种语言出现,但你可以尝试并确保100%。

答案 6 :(得分:1)

将内部两个循环放在一个函数中,并使用return来中断它们。

答案 7 :(得分:1)

如果您需要更多控制权,可以使用带标签的中断。更多信息here。正如其他人所说,休息将关闭最接近的循环。

答案 8 :(得分:1)

如果使用一个名为'found'的布尔值并使用它如下:

while(!found) {
    for(...) {
        //todo
    }
}

答案 9 :(得分:0)

我认为你可以再做一件事......

for(int k = 0; k&lt; stationen.length-1; k ++){                     if(stationen [k] .reparatur == null){                         schlepper.fliege(Stationen酒店[K] .X,                                          Stationen酒店[K] .Y,                                          Stationen酒店[K] .Z);

                   k =  stationen.length + 1 ;

                }
            }