How do I break from the main/outer loop in a double/nested loop?
本问题已经有最佳答案,请猛点这里访问。
如果循环中有循环,并且当满足
这是我的代码:
1 2 3 4 5 6 7 8 9 10 | 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. } } } } |
使用带标签的分隔符:
1 2 3 4 5 6 7 8 | mainloop: for(){ for(){ if (some condition){ break mainloop; } } } |
也看到
- "循环:"在Java代码中。这是什么?为什么要编译?
- 文档
您可以将标签添加到循环中,并使用该
1 2 3 4 5 6 7 | outer: for (...) { inner: for(...) { if (someCondition) { break outer; } } } |
有关详细信息,请参阅以下链接:
- 分支语句
- JLS-中断声明
您只需从该函数中删除控件cx1(1)。或者使用丑陋的
如果在
IMO,在OOP中应该不鼓励使用中断和继续,因为它们会影响可读性和维护。当然,在有些情况下,它们很方便,但一般来说,我认为我们应该避免使用它们,因为它们会鼓励使用Goto风格的编程。
显然,对这个问题的不同之处被贴出了很多。在这里,彼得使用标签提供了一些好的和奇怪的用法。
它看起来像Java标记的中断似乎是走的路(基于其他答案的一致性)。
但对于很多人(大多数?)其他语言,或者如果要避免任何类似于
1 2 3 4 5 6 7 8 9 10 | bool breakMainLoop = false; for(){ for(){ if (some condition){ breakMainLoop = true; break; } } if (breakMainLoop) break; } |
只是为了好玩:
1 2 3 4 5 6 7 8 9 | for(int d = 0; d < amountOfNeighbors; d++){ for(int c = 0; c < myArray.size(); c++){ ... d = amountOfNeighbors; break; ... } // No code here } |
对
1 2 3 4 5 6 7 8 | foo: // Label the next statement (the block) { code ... break foo; // goto [1] code ... } //[1] |
对于初学者来说,最好且简单的方法是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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; } } |