How do I break out of nested loops in Java?

前端 未结 30 2795
梦毁少年i
梦毁少年i 2020-11-21 11:51

I\'ve got a nested loop construct like this:

for (Type type : types) {
    for (Type t : types2) {
         if (some condition) {
             // Do somethin         


        
相关标签:
30条回答
  • 2020-11-21 12:09

    Like other answerers, I'd definitely prefer to put the loops in a different method, at which point you can just return to stop iterating completely. This answer just shows how the requirements in the question can be met.

    You can use break with a label for the outer loop. For example:

    public class Test {
        public static void main(String[] args) {
            outerloop:
            for (int i=0; i < 5; i++) {
                for (int j=0; j < 5; j++) {
                    if (i * j > 6) {
                        System.out.println("Breaking");
                        break outerloop;
                    }
                    System.out.println(i + " " + j);
                }
            }
            System.out.println("Done");
        }
    }
    

    This prints:

    0 0
    0 1
    0 2
    0 3
    0 4
    1 0
    1 1
    1 2
    1 3
    1 4
    2 0
    2 1
    2 2
    2 3
    Breaking
    Done
    
    0 讨论(0)
  • 2020-11-21 12:09

    I never use labels. It seems like a bad practice to get into. Here's what I would do:

    boolean finished = false;
    for (int i = 0; i < 5 && !finished; i++) {
        for (int j = 0; j < 5; j++) {
            if (i * j > 6) {
                finished = true;
                break;
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-21 12:10

    You can use a temporary variable:

    boolean outerBreak = false;
    for (Type type : types) {
       if(outerBreak) break;
        for (Type t : types2) {
             if (some condition) {
                 // Do something and break...
                 outerBreak = true;
                 break; // Breaks out of the inner loop
             }
        }
    }
    

    Depending on your function, you can also exit/return from the inner loop:

    for (Type type : types) {
        for (Type t : types2) {
             if (some condition) {
                 // Do something and break...
                 return;
             }
        }
    }
    
    0 讨论(0)
  • 2020-11-21 12:10

    If you don't like breaks and gotos, you can use a "traditional" for loop instead the for-in, with an extra abort condition:

    int a, b;
    bool abort = false;
    for (a = 0; a < 10 && !abort; a++) {
        for (b = 0; b < 10 && !abort; b++) {
            if (condition) {
                doSomeThing();
                abort = true;
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-21 12:11

    Best and Easy Method..

    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;
         }
    }
    
    0 讨论(0)
  • 2020-11-21 12:11

    Demo

    public static void main(String[] args) {
        outer:
        while (true) {
            while (true) {
                break outer;
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题