2013-03-10 4 views
2

저는 Java의 초보자이며 연습하는 동안 이러한 오류가 발생했기 때문에 오류를 암기하지 않고 오류를 암시하지 않으려 고 생각했습니다.변수의 메소드 레벨 범위

public static int gcd(int a, int b) { 
    if(a > b) { 
    int result = a % b; 
    } 
    return result; 
} 

이 나에게 a cannot find symbol를 생성하지만 나는 나는 if 루프에서 int 같은 결과를 초기화하는 줄 알았는데?

public static int gcd(int a, int b) { 
    if(a > b) { 
    int result = a % b; 
    return result; 
    } 
} 

이렇게하려면 if 루프에서 결과를 반환하면 루핑을 계속하기 때문에 잘못 되었습니까?

public static int gcd(int a, int b) { 
    int result = 0; 
    if(a > b) { 
    result = a % b; 
    } 
    return result; 
} 

루프는 if 루프 밖에서 결과를 선언 할 때 오류가 없어집니다. 왜 그런가요? 그들은 오직 블록 그들이에서 만들어졌다.

블록을 { ... } 내부에 내부 코드를 볼 수 있기 때문에

+1

또한 루프가 아닌 경우. 그것은 조건입니다. 루프는 숫자 또는 원하는 시간에 작업을 반복 할 수있게 해주는 구조입니다 ... – Thihara

답변

1

로컬 변수 로컬 불린다. 에,

public static int gcd(int a, int b) { // first block starts here 
    if(a>b) { // second block, an inner block, starts here 
     int result=a%b; 
    } // second block ends here 
    return result; 
} // first block ends here 

그래서, 당신은 즉, 블록의 지역 변수를 생성하고 차단하는 외부 그것을을 를 사용하려고 :

의 당신이 당신의 첫 번째 버전에있는 블록을 보자 첫 번째 블록. 그것이 컴파일러가 불평하는 것입니다. 변수 result두 번째 블록이 완료된 후 사라졌습니다.

+0

하지만이 변수 결과는 내가 만들고있는 것입니다. 단지 if 루프 안에 넣기를 원합니다. 그래서 if 루프 내부에서 만듭니다. – user2148463

+0

@ user2148463 if loop 내에 변수를 작성하는 경우.이 루프 밖에서는 액세스 할 수 없습니다. –

+0

사실, 당신은 ** if 블록 밖에서 * 돌려주기 때문에 ** if 블록 밖에서 ** 사용하고 싶습니다. 즉, 바깥 쪽 블록에서 변수에 액세스해야합니다. 바깥 블록은 변수를 알아야합니다. –

4

이것은 변수 result의 범위와 관련이 있습니다. if 안에있을 때 if (})을 떠날 때 중지되었습니다.

public static int gcd(int a, int b){ 
    int result = 0; 
    if (a > b) { 
     result = a % b; 
    } 
    return result; 
} // result exists until here 

public static int gcd(int a, int b){ 
    if (a > b) { 
     int result = a % b; 
    } // result exists until here 
    return result; // result doesn't exist in this scope 
} 

은 기본적으로 당신은 코드 블록은 중괄호 { ... }으로가 정의 된 코드 블록 내에서만 액세스 변수를 정의 할 수 있습니다.

변수를 사용하지 않고도 함수의 대체 구현을 수행 할 수 있습니다.

public static int gcd(int a, int b){ 
    if (a > b) { 
     return a % b; 
    } 
    return 0; 
} 
+0

지금 사진을 볼 수 있습니다. 매우 명확합니다. 감사합니다. (: – user2148463

+0

@user2148463 아무런 문제가 없으므로 진드기를 맞추어 질문을 닫으십시오. –

+0

@Tyriar, this is not called * closing * in ,하지만 * 대답을 수락 *. 그것은 대답을 수락 한 후에도 여전히 열려 있습니다. –

0

첫 번째 오류에 대한 이유는 if 문이 변수에 대한 새로운 컨텍스트를 설정한다는 것이다. result 선언은 if 본문 외부에 표시되지 않습니다.

두 번째 경우에는 if 조건이 충족되지 않을 수 있습니다.이 경우 함수는 return 문을 실행하지 않습니다. 함수가 모든 실행 경로에 대해 int을 반환하거나 예외를 throw해야하기 때문에 이는 오류이기도합니다.