2013-08-26 116 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); 
    }