18

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

我有以下情况:

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

4

10 回答 10

46

它仅打破内部循环,因此可以执行您想要的操作。要中断多个级别,在 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 到但不包括指定值的每个值。

于 2010-12-02T06:42:43.783 回答
6

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

要使其打破外部循环,您可以使用标记的 break 为:

OUTER:for(...) {
         for(...) {
            break OUTER;
         }
      }
于 2010-12-02T06:42:11.637 回答
3

break只跳出最里面的循环。

于 2010-12-02T06:38:59.110 回答
1

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

于 2010-12-02T06:38:47.097 回答
1

只是第二个。您当然可以使用“goto”。

于 2010-12-02T06:39:20.157 回答
1

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

于 2010-12-02T06:40:17.047 回答
1

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

于 2010-12-02T06:40:40.717 回答
1

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

于 2010-12-02T06:40:52.383 回答
1

使用一个你称之为'found'的布尔值并像这样使用它怎么样:

while(!found) {
    for(...) {
        //todo
    }
}
于 2010-12-02T08:04:58.660 回答
0

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

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);

                   k =  stationen.length + 1 ;

                }
            }
于 2010-12-02T06:46:05.847 回答