Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I break out of nested loops in Java?

I've got a nested loop construct like this:

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

Now how can I break out of both loops? I've looked at similar questions, but none concerns Java specifically. I couldn't apply these solutions because most used gotos.

I don't want to put the inner loop in a different method.

I don't want to return the loops. When breaking I'm finished with the execution of the loop block.

like image 393
boutta Avatar asked May 20 '09 09:05

boutta


People also ask

How do you break a loop in nested?

Using break in a nested loop In a nested loop, a break statement only stops the loop it is placed in. Therefore, if a break is placed in the inner loop, the outer loop still continues. However, if the break is placed in the outer loop, all of the looping stops.

How do you exit a loop in Java?

When the break statement is encountered inside a loop, the loop is immediately terminated and the program control resumes at the next statement following the loop. It can be used to terminate a case in the switch statement (covered in the next chapter).

How do you break out of a loop?

To break out of a for loop, you can use the endloop, continue, resume, or return statement.


2 Answers

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 
like image 89
Jon Skeet Avatar answered Sep 29 '22 19:09

Jon Skeet


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);             }         }     } } 
like image 45
Zo72 Avatar answered Sep 29 '22 21:09

Zo72