2014-11-16 2 views
0

2와 50 (포함) 사이의 모든 소수를 표시하기 위해 다음 프로그램을 작성했습니다. 프로그램이 의도 한대로 실행되었지만 코드를 재검토 할 때 왜 실패하지 않았는지 궁금했습니다. if 문은 isprime 변수의 값을 변경할 수 있습니다. 그러나 코드 블록 {}이 (가) 내부 블록 for에 남아 있으면이 변경 사항을 잊지 않았습니까? 이는 isprimetrue으로 남아 있고 모든 숫자가 표시된다는 것을 의미합니다.Java 범위와 변수의 수명

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

    int a, b; 
    boolean isprime; 

    for (a = 2; a < 51; a++) { 

     isprime = true; 

     for (b = a-1; b > 1; b--) { 

      if (a % b == 0) isprime = false; 
     } 

     if (isprime) System.out.println(a); 
    } 
} 
} 

답변

2

글쎄, 알다시피, 그게 어떻게 작동하지 않습니다 : 변수의 범위는 어떤 하위 블록을 포함하여 선언 된 블록입니다.

하위 블록에서 변수를 수정하면 모든 범위에서 변수가 수정됩니다. 변수의 복사본은 새 블록이 시작될 때마다 만들어지지 않습니다.

1

1. 문

네이 내측 ifisprime

2. 그러나 변경할 수 변수 'isprime'의 값을 변경할 수 '하면'이 변화 내부 'for'코드 블록 {}이 남아 있으면 잊지 않겠습니까?

아니요. 잊지 않았습니다.

3. 이는 isprime이 true로 유지되고 모든 숫자가 표시됨을 의미합니다. 그것의 범위는 전체 program.This 변수이기 때문에

에만 두 번째 질문 (2 번) 경우가 발생할 수는 어떤 방법으로 변경할 수 있습니다 당해도 싸지 글로벌 변수의

생각해을 잊어 어떤 방법 으로든 변경할 수 있습니다. 마찬가지로 isprimemain에서 변경 될 수 있으며 main에 선언되어 있고 그 범위는 main입니다.