继续并扩大范围
continue
或break
是否有可能比当前运行的循环具有更大的范围?
在下面的例子中,我希望在expr
为true时继续外部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] }
在上面
如果你绝对必须,你可以使用goto
。 但是,我通常采用以下两种方法之一:
- 使内部循环成为一个返回
bool
的单独方法,所以我可以从它返回并指出外部循环应该做什么(中断,继续或执行循环体的其余部分) - 保持一个单独的
bool
标志,它在内循环之前设置,可以在内循环内修改,然后在内循环之后检查
在这些方法中,我通常更喜欢“提取方法”方法。
你的意思是这样的吗?
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; }
你可以使用goto语句,否则 – no,break和continue语句不支持这个。
虽然goto语句被认为是不好的做法,但这是唯一为什么要退出多个for循环…而且看起来这仍然是.NET的一部分的原因
您可以将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] }