2017-08-10 76 views
-6
import java.util.Scanner; 
class testing 
{ 
    int i ; int j ; 
    Scanner sc = new Scanner(System.in) ; 
    void lolwa() 
    { 
     out: 
     for(i = 0 ; i <= 6 ; i++) 
     { 
      System.out.println(i); 
     } 
     System.out.println("Enter 1 to restart loop"); 
     System.out.println("Enter 2 to continue till 10"); 
     j = sc.nextInt(); 
     if(j == 1) 
     { 
      continue out ; 
     } 
     if(j == 2) 
     { 
      for(i = 7 ; i <= 10 ; i++) 
      { 
       System.out.println(i); 
      } 
     } 
    } 
} 

我編譯它在BlueJ,它說:「未定義標籤出」。我只是用continue語句學習,因此我不能找出問題標記繼續語句無法編譯

+0

一個奇怪的問題:爲什麼不直接調用'lolwa()'而不是使用continue? – Nathan

+2

你的繼續在標籤出來的循環已經完成後出現。你有沒有錯過你的牙套? –

+4

您應該正確縮進代碼 - 「繼續」需要處於循環狀態。 – assylias

回答

5

out標籤「詮釋」這個for循環:

out: 
for(i = 0 ; i <= 6 ; i++) 
{ 
    System.out.println(i); 
} 

因此,爲了繼續與標籤out,它會需要在之內for循環。在for循環結束後使用它沒有意義。這將編譯,例如:

out: 
for(int i = 0; i <= 6; i++) 
{ 
    System.out.println(i); 
    continue out; 
} 

但是,在這種情況下,您不需要標記的continue語句。沒有歧義。只有一個循環可以「繼續」出來。

Oracle tutorial很好地解釋了它。


值得一提的是,我甚至不記得上一次我不得不使用標記繼續 - 也許從來沒有。除非你幾乎沒有別的選擇,否則我會避開它們。

+2

我只能假設它是來自程序集的JSR命令(例如)的剩餘部分。我之前使用過它們,因爲幾乎沒有其他選擇。使用標籤來控制像java這樣的高級語言中的邏輯流程的IMO幾乎代表了每種情況下的糟糕設計。 – tnw

+0

有替代(標誌變量和/或冗餘檢查)不必要地使代碼複雜化的嵌套循環用例有限。他們幾乎沒有。 :-) –

+0

@Michael我不知道你爲什麼用break語句來演示它。 TO正在使用繼續。該示範以同樣的方式應對,但仍然是:p – Nathan

1

我認爲你沒有得到continue label的使用:它必須在循環中使用,並用於跳轉到你的特定標籤。一個if語句是而不是一個循環。只需撥打lolwa()即可更換您的continue out,您將獲得理想的bahaviour:您將被髮送到您的功能的開始。