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

我有以下情况:

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

有帮助吗?

解决方案

它仅破坏内部循环,因此可以完成您想要的。要打破一个以上的级别,在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到 但不包括 指定的一个。

其他提示

break 在您的情况下,将打破最内向的循环。

为了使其破坏外循环,您可以使用标记的断裂为:

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

break 只会突破最内向的循环。

休息将导致休息仅用于最接近循环(第二个循环)

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

Break语句终止了以多种语言出现的最接近的封闭循环或开关语句,但您可以尝试并确保100%。

将内部的两个循环放入功能中,然后使用返回以脱离两个循环。

如果您需要更多控制权,则可以使用标记的断裂。更多信息 这里. 。正如其他人所说,休息将关闭最接近的循环。

使用您称为“找到”的布尔值并使用这样的布尔:

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

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

for(int k = 0; k <statesen.length-1; k ++){if(stenten [k] .reparatur == null){schlepper.fliege(statesen [k] .x .x,senten [k] .y,senten [k] .z);

                   k =  stationen.length + 1 ;

                }
            }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top