continue
或break
是否有可能比当前正在运行的循环具有更大的范围?
在下面的示例中,我希望在expr
为真时继续外部for循环,尽管它在内部for循环中被调用,因此[some inner code]
和[some outer code]
都不会被执行。
for(int outerCounter=0;outerCounter<20;outerCounter++){
for(int innerCounter=0;innerCounter<20;innerCounter++){
if(expr){
[continue outer]; // here I wish to continue on the outer loop
}
[some inner code]
}
[some outer code]
}
在上面
答案 0 :(得分:11)
如果您绝对必须,可以使用goto
。但是,我通常采用以下两种方法之一:
bool
的单独方法,因此我可以从它返回并指出外循环应该做什么(中断,继续或执行循环体的其余部分)bool
标志,该标志在内循环之前设置,可以在内环中修改,然后在内环之后检查 在这些方法中,我通常更喜欢“提取方法”方法。
答案 1 :(得分:4)
你的意思是这样吗?
for(int outerCounter=0;outerCounter<20;outerCounter++){
for(int innerCounter=0;innerCounter<20;innerCounter++){
if(expr){
runOuter = true;
break;
}
[some inner code]
}
if (!runOuter) {
[some outer code]
}
runOuter = false;
}
答案 2 :(得分:1)
您可以使用goto语句,否则 - no,break和continue语句不支持此功能。
虽然goto语句被认为是不好的做法,但这是唯一为什么要退出多个for循环...而且看起来这仍然是.NET的一部分
答案 3 :(得分:1)
您可以将goto
语句与标签结合使用:
for(int outerCounter=0;outerCounter<20;outerCounter++){
for(int innerCounter=0;innerCounter<20;innerCounter++){
if(expr){
break;
}
[some inner code]
}
// You will come here after break
[some outer code]
}