关于java:打破嵌套循环和主循环

Breaking nested loop and main loop

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

我有以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int x = 100; //Or some other value

while(x > 0) {

    for(int i = 5; i > 0; i++) {

        x = x-2;

        if(x == 0)
            break;

        }

}

但是,这只会破坏for循环。我怎么能得到它,这样它就打破了for和while循环?

干杯!


可以使用带标签的break,它将执行重定向到由标签标记的块之后:

1
2
3
4
5
6
7
8
OUTER:
while(x > 0) {
    for(int i = 5; i > 0; i++) {
        x = x-2;
        if(x == 0)
            break OUTER;
    }
}

尽管在这种特定的情况下,一个简单的break会起作用,因为如果x == 0的话,同时也会退出。


1
2
3
4
5
6
7
8
9
10
bool done=false;
while(!done && x > 0) {
    for(int i = 5;!done &&  i > 0 ; i++) {
        x = x-2;
        if(x == 0){
            done=true;
            break ;
        }
    }
}


尽量避免中断,总会有其他方法来编写循环,这样你就不需要它了,如果有人不得不修改你的代码,那么它就更"漂亮",更容易理解。在您的示例中,while循环是不必要的,但为了向您展示它是如何实现的:

1
2
3
4
5
6
7
8
9
while(x > 0) {

  for(int i = 5; i > 0 && x!=0; i++) {

    x = x-2;

  }

}

如果x等于0,则将保留for循环。然后将验证while条件:x小于0(为零),因此while循环也将停止执行。


请参阅此示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Outer:
    for(int intOuter=0; intOuter < intArray.length ; intOuter++)
    {
      Inner:
      for(int intInner=0; intInner < intArray[intOuter].length; intInner++)
      {
        if(intArray[intOuter][intInner] == 30)
        {
          blnFound = true;
          break Outer;
        }  

      }
    }