2013-08-10 2 views
-1

나는 goto가 자바에서 아무런 쓸모가없는 키워드라는 것을 알고있다. 레이블이나 다른 방법을 사용하여 코드의 다른 부분으로 이동할 수 있습니까?Java에서 goto 함수를 수행하는 방법이 있습니까?

public static void main(String[] args) { 
     for(int i=5; i>0; i--){ 
      System.out.println(); 

      first: 
      for(int x=i; x<6; x++){ 
       System.out.print("*"); 
      } 
     } 
     System.out.println("print '*'");{ 
      break first; 
     } 
    } 
} 
+0

난 당신이 exaclty을 인쇄하려고하는지 설명해야한다고 생각, 그것은 쉽게 당신은 레이블이있는 블록에 휴식을 사용할 수있는이 – benzen

답변

2

당신은 같은 코드에서 다른 레이블로 이동합니다 continue를 사용할 수 있습니다

public class Label { 
    public static void main(String[] args) { 
     int temp = 0; 
     out: // label 
     for (int i = 0; i < 3; ++i) { 
      System.out.println("I am here"); 
      for (int j = 0; j < 20; ++j) { 
       if(temp==0) { 
        System.out.println("j: " + j); 
        if (j == 1) { 
         temp = j; 
         continue out; // goto label "out" 
        } 
       } 
      } 
     } 
     System.out.println("temp = " + temp); 
    } 
} 

출력 :

I am here 
j: 0 
j: 1 
I am here 
I am here 
temp = 1 

그러나 나는 당신이 그것을 할 것을 권장하지 않습니다. James Gosling이 goto 문을 지원하는 원래의 JVM을 생성했지만,이 기능을 불필요한 것으로 제거한 것처럼 좀 더 세련된 방법이 있습니다. goto가 불필요한 주된 이유는 일반적으로 더 쉽게 읽을 수있는 명령문 (예 : break/continue)으로 대체되거나 메소드에 코드 조각을 추출함으로써 대체 될 수 있다는 것입니다.

출처 : James Gosling, Q&A session

0

아니요, Java는 goto가 아닙니다. 레이블은 끊기 위해서만 사용되거나 다른 루프를 계속합니다.

+1

에 대한 더 나은 솔루션을 찾을 수 있습니다. –

3

예라고이

first: { 
    for(int i=5; i>0; i--){ 
    System.out.println(); 
    if (func(i)) 
     break first; 
    for(int x=i; x<6; x++){ 
     System.out.print("*"); 
    } 
    } 
} 
System.out.println("print '*'"); 
+0

나는 여기서 뭔가를 배웠다 : 나는 당신이 임의의 둘러싸는 블록이 아니라 둘러싼 루프로 깨질 수 있다고 착각했다. 이 점에 대해 조금 더 자세히 설명하고 싶을 수도 있습니다! –

+0

func (i)의 기능은 무엇입니까? "print '*'"를 인쇄 한 후 inner for 루프로 이동합니까? –

+1

'func()'는 단지 임의의 부울 조건입니다. 그게 무엇이든 상관 없습니다. –

2

할 수 있지만 사용하지 않는 이유 고토가있다. 끔찍하다. 당신은 그러나 그냥 궁금 경우, 여기에 그것을 할 수있는 방법 : 당신이 적절한 방법이 원하는 아닌 경우

http://www.steike.com/code/useless/java-goto/

이, 당신의 진짜 질문을하고 최종 목표를 진술은, 그래서 우리는 당신이 설계하는 데 도움이 될 수 있습니다 그것. :)

+0

그것은 인상적이다 :) –

+0

나는 다른 '방법'으로 코드를 나누지 않고 코드의 다른 부분으로 옮기고 싶다. C에서 goto처럼 –