2014-01-19 22 views
-1

跳我有這樣如何用Java

public class Test 
{ 

    public static void main(String[] args) 
    { 
     continue s; 
     System.out.println("I am not supposed to print this"); 
     s: 
     System.out.println("I am suppose to print this"); 

    } 
} 

代碼我得到的錯誤

java: undefined label: s 

有什麼不對?

+3

Java不支持'GOTO'(和類似的)。坦率地說,我認爲'GOTO'會讓代碼混淆。 – str

回答

0

本質上說,要做到這一點在Java中沒有實際的方式。你似乎試圖做一個「goto」,而這在Java中不被支持。 break labelcontinue label語句只能分支到包含標記語句。

現在根據你可以寫這個Java的形式文法:

s: { 
     continue s; 
     System.out.println("I am not supposed to print this"); 
    } 
    System.out.println("I am suppose to print this"); 

仍然將不能編譯,原因有二:

  • 將繼續只被允許分支到循環語句中的標籤。 (A break沒有該限制...但是...)

  • continue(或break)使下一個語句無法訪問。

參見:Alternative to a goto statement in Java


但還有讓你的代碼一個相當棘手的方式來 「工作」:

static final boolean flag = true; // class attribute ... 

    ... 

    s: { 
     if (flag) break s; 
     System.out.println("I am not supposed to print this"); 
    } 
    System.out.println("I am suppose to print this"); 

「測試」 不會被評估編譯器使break實際上是無條件的。但JLS表示,第一個println視爲可達,以便您不會得到無法訪問的代碼錯誤。

我想這可能是有用的,如果你是生成這個源代碼。除此之外,(IMO)只是一種好奇心。使用常規的if/else聲明...或通過完全刪除第一個「打印」來更簡單。

0

continue是Java中的一個關鍵字,用於跳過循環的迭代。 如果你正在努力尋找一個相當於GOTO,你應該重新考慮如何設法解決您的問題,GOTO從來都不是一個有效的選擇,永遠。

0

據我所知,目前在Java中沒有goto(有一個關鍵字,但它沒有什麼意義)

1

像個跳,這是不可能在Java中,只有跳躍的方式是從循環,一邊做。

@Heinzi答案

2.2.6沒有更多的goto語句

Java沒有goto語句。研究表明,goto被(錯誤)使用更多,而不僅僅是「因爲它在那裏」。 消除goto導致語言簡化 - 例如,沒有關於goto到for語句中間效果的規則。對大約100,000行C代碼的研究確定,大約百分之九十的goto語句純粹用於獲得突破嵌套循環的效果。如上所述,多級別中斷並繼續刪除大部分對goto語句的需求。

The Java Language Environment, James Gosling and Henry McGilton, 1996

1

沒有 「轉到」 在java中。而「繼續」做一些其他功能。可以用「繼續」,例如在循環中,如:

class ContinueDemo { 
    public static void main(String[] args) { 

     String searchMe = "peter piper picked a " + "peck of pickled peppers"; 
     int max = searchMe.length(); 
     int numPs = 0; 

     for (int i = 0; i < max; i++) { 
      // interested only in p's 
      if (searchMe.charAt(i) != 'p') 
       continue; 

      // process p's 
      numPs++; 
     } 
     System.out.println("Found " + numPs + " p's in the string."); 
    } 
} 

在上面的例子中,如果例如searchMe.charAt(5) != 'p'則環路將從循環的開始繼續從i = 6,和numPs++;將不被處理。

你可以閱讀更多關於此這裏: Branching Statements

0

理論上,Java有Jump語句returnbreak

return語句跳出方法,無論是否將值返回給調用語句。

break語句跳出循環。

正如在前面的答案中所提到的,goto在Java中不可用,並且在程序或面向對象編程中不被認爲是一種很好的編程習慣。它在順序編程的時代已經存在。