在Java中打破嵌套的for循环

时间:2012-12-12 16:38:44

标签: java loops for-loop while-loop break

  

可能重复:
  Breaking out of nested loops in Java

如何使用break和/或continue语句返回第1,2和3点的while循环的第一行,例如,如伪代码所示?

假设我有一个让人联想到以下内容的场景:

while(condition) {
    // want to return to this point
    for (Integer x : xs) {
        // point 1
        for (Integer y : ys) {
            // point 2
            ...
        }
        ...
    }
    for (Integer a : as) {
        for (Integer b : bs) {
            // point 3
            ...
        }
        ...
    }
}

6 个答案:

答案 0 :(得分:5)

使用如下标签:

outer:
while(condition) {
// want to return to this point
for (Integer x : xs) {
    // point 1
    for (Integer y : ys) {
        // point 2
        ...
    }
    ...
}
for (Integer a : as) {
    for (Integer b : bs) {
        // point 3
        ...
    }
    ...
}

}

然后您可以使用break outer;来转义while循环。这也适用于嵌套的for循环,但我尽量不要过度使用标签

正如@Peter所指出的那样,如果你希望提前完成当前的外部迭代并继续下一个迭代,则使用continue outer;,而不是转义while循环。

答案 1 :(得分:2)

label你的循环语法

LABEL: LoopType以后您可以使用 Break Statement break LABEL;退出某个循环。

OUT: while(somecond){
IN:for(...) {
   INNER: for(...){
break IN;// will get you outta IN and INNER for loop
}
 }
}

答案 2 :(得分:2)

loop:
while(condition) {
// want to return to this point
for (Integer x : xs) {
    continue loop:
    for (Integer y : ys) {
        continue loop:
        ...
    }
    ...
}
for (Integer a : as) {
    for (Integer b : bs) {
        continue loop:
        ...
    }
    ...
}

}

答案 3 :(得分:1)

你可以这样做:

here:
while(condition) {
   for (Integer x : xs) {
        // point 1
        for (Integer y : ys) {
            break here;
        }
    }

break语句,带或不带标签,is described in the Java specification

  

没有标签的break语句尝试将控制转移到   最里面的封闭开关,while,do,或for语句   立即封闭方法或初始化器;这句话,是   称为中断目标,然后立即正常完成。

     

带有标签标识符的break语句尝试转移控件   到具有相同标签的封闭标签声明(第14.7节)   标识符作为其标签;这句话,叫做休息   目标,然后立即正常完成。在这种情况下,休息   目标不一定是开关,而是,做,或用于陈述。

答案 4 :(得分:0)

是的,您可以使用带有标签的break语句:

SOME_LABEL:
   // ... some code here
   break SOME_LABEL;

谨慎使用,这是一种打破多个嵌套循环的简洁方法。

答案 5 :(得分:0)

你可以这样发布在这里发布stackoverflow.com/questions/886955/breaking-out-of-nested-loops-in-java处理同样的问题。