关于java:如何在双/嵌套循环中断开主/外循环?

How do I break from the main/outer loop in a double/nested loop?

本问题已经有最佳答案,请猛点这里访问。

如果循环中有循环,并且当满足if语句时,我希望中断主循环,那么应该如何做呢?

这是我的代码:

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代码中。这是什么?为什么要编译?
  • 文档


您可以将标签添加到循环中,并使用该labelled break中断相应的循环:

1
2
3
4
5
6
7
outer: for (...) {
    inner: for(...) {
        if (someCondition) {
            break outer;
        }
    }
}

有关详细信息,请参阅以下链接:

  • 分支语句
  • JLS-中断声明


您只需从该函数中删除控件cx1(1)。或者使用丑陋的break labels方法:)

如果在for语句之后还有其他代码部分,则可以重构函数中的循环。

IMO,在OOP中应该不鼓励使用中断和继续,因为它们会影响可读性和维护。当然,在有些情况下,它们很方便,但一般来说,我认为我们应该避免使用它们,因为它们会鼓励使用Goto风格的编程。

显然,对这个问题的不同之处被贴出了很多。在这里,彼得使用标签提供了一些好的和奇怪的用法。


它看起来像Java标记的中断似乎是走的路(基于其他答案的一致性)。

但对于很多人(大多数?)其他语言,或者如果要避免任何类似于goto的控制流,则需要设置一个标志:

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
}

break label的评论:这是一个向前的goto。它可以中断任何语句并跳到下一个语句:

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;
    }
}