2013-09-06 3 views
2

왜 컴파일 오류입니까? Java는 bar이라는 두 선언에 모두 도달 할 수 없습니다.스위치 로컬 변수 컴파일 오류

import java.util.Random; 

public class SwitchTest { 
    public static void main(String[] args) { 
    Random r = new Random(); 
    int foo = r.nextInt(2); 

    switch(foo) { 
    case 0: 
     int bar = r.nextInt(10); 
     System.out.println(bar); 
     break; 
    case 1: 
     int bar = r.nextInt(10) + 10; // Doesn't compile!! 
     System.out.println(bar); 
     break; 
    } 
    } 
} 

답변

6

둘 다 동일한 어휘 범위에 있으며 실행 도달 가능성과 다릅니다.

case 안에 코드 주위에 중괄호를 넣으면 작동합니다.

+0

+1 밖에서 줄을 선언하지만, 수 : * 더 나은 아직 "각각의 경우 내부의 코드 주위에 괄호를 넣고 그것을 작동합니다."* 또는 * 그렇게하지 않는다 *. –

+0

"어휘 범위"에 대한 정의가 확실하지 않은 사람들은 중괄호 그룹과 동일한 것입니까? –

+2

@ T.J.Crowder 왜 안 되니? – durron597

3

당신은 범위가 너무

import java.util.Random; 

public class SwitchTest { 
    public static void main(String[] args) { 
    Random r = new Random(); 
    int foo = r.nextInt(2); 

    int bar; //bar is out of the switch scope 

    switch(foo) { 
    case 0: 
     bar = r.nextInt(10); 
     System.out.println(bar); 
     break; 
    case 1: 
     bar = r.nextInt(10) + 10; 
     System.out.println(bar); 
     break; 
    } 
    } 
} 
+0

나는 그것을 고치는 법을 안다, 나는 단지 그것이 일어나는 이유를 알고 싶다. – durron597

+1

수정 방법을 알고 있다면 같은 범위에서 두 번 변수를 선언 할 수 없다는 것을 알아야합니다. 그 이유가 여기에 있습니다. 어쨌든이 코드는 더 읽기 쉽기 때문에 코드를 게시했습니다. –

관련 문제