2013-08-26 93 views
-1

当count变为9时,我想退出两个for循环。我使用break,但它只能从第一个for循环退出。它怎么做?想要退出for循环

 ArrayList<String> list = new ArrayList<String>(); 
     int count = 0; 
     System.out.println("Before entering to loop"); 
     for(int i=0;i<5;i++){ 
      list.add("XYZ"+i); 
      for(int j=0;j<5;j++){ 
       list.add("ABC"+j); 
       count++; 
       if(count==9){ 
        System.out.println("I want to exit from here."); 
        break; 
       } 
       System.out.println("i="+i+"::j="+j); 
      } 
      System.out.println("------------"); 
     } 
     for(String str:list){ 
      System.out.println(str); 
     } 
    } 
+0

可能重复[如何从主/外回路断线一个双/嵌套循环?](http://stackoverflow.com/questions/13073300/how-to-break-from-main-outer-loop-in-a-double-nested-loop) –

回答

5

您可以使用标签:

OUTER: for (...) { // <-- 
    ... 
    for (...) { 
     if (...) 
      break OUTER; // <-- 
    } 
} 

这是覆盖在Java教程的Branching Statements部分和JLS §14.7

+1

保重,它可能会减少你的代码到一盘意大利面。你可能更喜欢让你的循环在特定的方法中完成后返回一些值。或者重构你的算法只有一个循环。 – Guillaume

0

在你打破内循环之前,你可以设置一个布尔标志为true。然后检查外部循环是否为真。如果是这种情况,那么也要打破外部循环。

+2

(或)你可以使用标记的中断http:// stackoverflow。com/questions/15481/java-coding-standard-best-practices-labeled-break-continue – kosa

0

您可以引入一个标志,当计数达到9时,它会在内部循环中设置。外部循环将有一个if语句来检查该标志值。如果为true,则也打破外部循环。事情是这样的:

boolean breakLoop = false; 
for(int i=0;i<5;i++){ 
      list.add("XYZ"+i); 
      for(int j=0;j<5;j++){ 
       list.add("ABC"+j); 
       count++; 
       if(count==9){ 
        System.out.println("I want to exit from here."); 
        breakLoop = true; 
        break; 
       } 
       System.out.println("i="+i+"::j="+j); 
      } 
      if(breakLoop) 
       break; 
      System.out.println("------------"); 
     } 
1

你可以去标签

标签:

您可以在一个循环的开始放置一个标签。标签是一个标识符,后跟一个冒号。这只是你的代码中的一个位置。然后,您可以使用break,然后使用标签名称来打破循环的标签。

例如:

public void twoNum(int num, int val) 
{ 
OUTER_LOOP: // OUTER_LOOP is a label 
    for (int i = 0 ; i < num ; i++) 
    { 
     for (int j = 0 ; j < num ; j++) 
     { 
     if (i + j >= 2 * val) 
      break OUTER_LOOP ; 
     val = val/2 ; 
     } 
    } 
    // break comes here if it runs 

Incremental java

0
boolean outer=false; 
for(int i=0;i<5;i++){ 
     list.add("XYZ"+i); 
     for(int j=0;j<5;j++){ 
      list.add("ABC"+j); 
      count++; 
      if(count==9){ 
       outer= true; 
       System.out.println("I want to exit from here."); 
       break; 
      } 
      System.out.println("i="+i+"::j="+j); 
     } 
     System.out.println("------------"); 
     if(outer==true) 
     break; 
    } 
0

有很多关于break报表和标签的答案,但这些结构通常会导致混乱的代码很难阅读时,理解这是第一次(或稍后重新阅读)。一般来说,我认为在这种情况下重构会更好。

在你的例子中,你知道你想在内部循环的9次迭代之后停下来,那么为什么你很难将你的循环计数器设置为5?这将是更清晰明确地做你想要什么:

ArrayList<String> list = new ArrayList<String>(); 

    System.out.println("Before entering to loop"); 
    list.add("XYZ"+i); 
    for(int j=0;j<5;j++){ 
     list.add("ABC"+j); 
    } 
    list.add("XYZ"+i); 
    for(int j=0;j<4;j++){ 
     list.add("ABC"+j); 
    } 
    for(String str:list){ 
     System.out.println(str); 
    } 
} 

看我们多能消除,产生的代码更清楚地表明了它会做。我知道这可能只是一个说明性的例子,但我认为这一点仍然存在 - 很可能在您的真实世界的代码中存在类似的重构机会。

0

只需添加

(数= 9!)

条件的for循环:

ArrayList<String> list = new ArrayList<String>(); 
    int count = 0; 
    System.out.println("Before entering to loop"); 
    for(int i=0;i<5;i++){ 
     list.add("XYZ"+i); 
     for(int j=0;j<5 && count!=9;j++){ 
      list.add("ABC"+j); 
      count++; 
      System.out.println("i="+i+"::j="+j); 
     } 
     System.out.println("------------"); 
    } 
    for(String str:list){ 
     System.out.println(str); 
    }