如何从双/嵌套循环中的主/外循环中断开?

如果我有一个循环循环,一旦语句满足,我想打破主循环,我该怎么做呢?

这是我的代码:

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 second loop not main one. } } } } 

使用标记的rest

 mainloop: for(){ for(){ if (some condition){ break mainloop; } } } 

另见

  • Java代码中的“loop:”。 这是什么,为什么编译?
  • 文档

您可以将标签添加到您的循环,并使用labelled break来摆脱适当的循环: –

 outer: for (...) { inner: for(...) { if (someCondition) { break outer; } } } 

查看这些链接了解更多信息:

您可以从该functionreturn控件。 或者使用丑陋的break labels方法:)如果在for语句之后还有另一个代码部分,则可以重构函数中的循环。

国际海事组织应停止使用rest和继续,因为它们会影响可读性和维护性。 当然,有些情况下,他们是方便的,但总的来说,我认为我们应该避免他们,因为他们会鼓励使用goto风格编程。

显然这个问题的变化很多, 在这里,彼得提供了一些使用标签的好用和奇怪的用法。

看起来像Java的标签中断似乎是要走的路(基于其他答案的共识)。

但对于许多(大多数?)其他语言,或者如果您想要避免像控制stream程一样的goto ,您需要设置一个标志:

 bool breakMainLoop = false; for(){ for(){ if (some condition){ breakMainLoop = true; break; } } if (breakMainLoop) break; } 

只是为了好玩

 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] 

最好的和简单的方法,甚至初学者

 outerloop: for(int i=0; i<10; i++){ // here we can break Outer loop by break outerloop; innerloop: for(int i=0; i<10; i++){ // here we can break innerloop by break innerloop; } }