How do I break out of nested loops in Java?

ID : 460

viewed : 260

Tags : javaloopsnested-loopsjava





Top 5 Answer for How do I break out of nested loops in Java?

vote vote

90

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 
vote vote

85

Technically the correct answer is to label the outer loop. In practice if you want to exit at any point inside an inner loop then you would be better off externalizing the code into a method (a static method if needs be) and then call it.

That would pay off for readability.

The code would become something like that:

private static String search(...)  {     for (Type type : types) {         for (Type t : types2) {             if (some condition) {                 // Do something and break...                 return search;             }         }     }     return null;  } 

Matching the example for the accepted answer:

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

74

You can use a named block around the loops:

search: {     for (Type type : types) {         for (Type t : types2) {             if (some condition) {                 // Do something and break...                 break search;             }         }     } } 
vote vote

66

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

53

You can use labels:

label1:  for (int i = 0;;) {     for (int g = 0;;) {       break label1;     } } 

Top 3 video Explaining How do I break out of nested loops in Java?







Related QUESTION?