-
30-09-2019 - |
题
可能的重复:
如何在双/嵌套环中从主/外循环中断?
我有以下情况:
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 ;
}
}