如果我在循环中循环并且一旦if
语句满足,我想打破主循环,我该怎么做呢?
这是我的代码:
for (int d = 0; d < amountOfNeighbors; d++) {
for (int c = 0; c < myArray.size(); c++) {
if (graph.isEdge(listOfNeighbors.get(d), c)) {
if (keyFromValue(c).equals(goalWord)) { // Once this is true I want to break main loop.
System.out.println("We got to GOAL! It is "+ keyFromValue(c));
break; // This breaks the second loop, not the main one.
}
}
}
}
答案 0 :(得分:60)
使用标记的中断:
mainloop:
for(){
for(){
if (some condition){
break mainloop;
}
}
}
另见
答案 1 :(得分:27)
您可以为循环添加标签,并使用labelled break
打破适当的循环: -
outer: for (...) {
inner: for(...) {
if (someCondition) {
break outer;
}
}
}
有关详细信息,请参阅以下链接:
答案 2 :(得分:12)
您可以return
来自该功能的控件。或者使用丑陋的break labels
方法:)
如果在for
语句后面还有其他代码部分,则可以在函数中重构循环。
IMO,在OOP中应该不鼓励使用中断和继续,因为它们会影响可读性和维护。当然,有些情况下它们很方便,但总的来说我认为我们应该避免使用它们,因为它们会鼓励使用goto风格的编程。
很明显,这个问题的变化很多。 Here彼得使用标签提供了一些好的和奇怪的用途。
答案 3 :(得分:3)
看起来对于Java而言,标记的中断似乎是要走的路(基于其他答案的共识)。
但是对于许多(大多数?)其他语言,或者如果你想避免任何goto
类似的控制流,你需要设置一个标志:
bool breakMainLoop = false;
for(){
for(){
if (some condition){
breakMainLoop = true;
break;
}
}
if (breakMainLoop) break;
}
答案 4 :(得分:2)
只是为了好玩:
for(int d = 0; d < amountOfNeighbors; d++){
for(int c = 0; c < myArray.size(); c++){
...
d = amountOfNeighbors;
break;
...
}
// No code here
}
对break label
的评论:这是一个前瞻性的转到。它可以打破任何声明并跳转到下一个:
foo: // Label the next statement (the block)
{
code ...
break foo; // goto [1]
code ...
}
//[1]
答案 5 :(得分:0)
为初学者提供最好,最简单的方法:
outerloop:
for(int i=0; i<10; i++){
// Here we can break the outer loop by:
break outerloop;
innerloop:
for(int i=0; i<10; i++){
// Here we can break innerloop by:
break innerloop;
}
}