2013-08-16 27 views
1

嗨在下面的代碼中,我試圖走出for循環使用中斷和標籤,但我得到以下錯誤。 Label Z is missing.請幫我下面的代碼。請提及爲何發生此錯誤。這個錯誤是什麼意思標籤z在break語句中缺失?

public class Breaker { 
    static String o = ""; 
    public static void main(String[] args) { 
     z: 
     o = o + 2; 
     for(int x = 3; x < 8; x++) { 
      if(x==4) break; 
      if(x==6) break z; 
      o = o + x; 
     } 
     System.out.println(o); 
    } 
} 
+0

閱讀[這個](http://stackoverflow.com/questions/8802287/break-and-label-the-label-mylable-is-missing)的問題。 – simont

回答

3

你所得到的錯誤,因爲在你的代碼標籤ž :不包含任何循環:

請嘗試下面的代碼:我剛剛在標籤z後添加了一對大括號:您將不會收到任何編譯錯誤,並且您的代碼將運行。

public class Breaker { 
    static String o = ""; 
    public static void main(String[] args) { 
     z: 
     { 
     o = o + 2; 
     for(int x = 3; x < 8; x++) { 
      if(x==4) break; 
      if(x==6) break z; 
      o = o + x; 
     } 
     System.out.println(o); 
    } 
    } 
} 
+0

這是一個偉大的獨特想法。我在哪裏可以找到官方oracle定義,詳細使用break語句(或任何其他可信來源)。 – user1900662

+1

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html – Nargis

1

爲了擺脫循環,你必須標註循環語句,而不是其他語句。 break someLabel雖然與嵌套循環一起纔有意義。否則,你可以只使用一個普通的break

+0

我如何標註循環語句。 – user1900662

+0

你在'for'前面加上'z:'。再次查看你的代碼,你可能會試圖做一些Java中不允許的事情(跳轉到循環中的其他語句)。 –

+0

謝謝彼得。但我仍然想知道爲什麼java不允許這樣做,因爲我不會跳到任何其他語句,我只是爲了循環而出來。 – user1900662

0
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 
} 

當你寫:

break OUTER_LOOP ; 

標籤,OUTER_LOOP,必須是一個封閉循環的標籤。通常,這不是最內層的封閉循環,因爲我們可以使用簡單的break語句,而不是「帶標籤的中斷」。 label必須位於break聲明的封閉loop之前。

Incremental Java

除此之外sysntax錯誤(lable的地方),如果你從上面的彙總明白了,你的情況,你只break