2013-05-27 11 views

답변

2

if 블록 내부에서 변수를 사용하려면 먼저 변수를 초기화해야합니다.

이 시도 :

double albedo=0; 

대신 : 당신이 다른 블록을 지정하지 않은대로 조건이 false를 반환하는 경우 변수가 0을 유지됩니다하지만

double albedo; 

염두에 두십시오.

+0

고마워요, 이것은 완벽하게 작동했습니다! – ninopino1

+1

이것은 컴파일 오류를 없애고 오해의 소지가 있으며 원래의 논리 문제를 해결하지 못합니다. 선언 시점에서 Java 변수를 초기화 할 필요는 없습니다. 값을 사용하기 전에 값을 지정해야합니다. 여기에는 두 개의 코드 경로가 있습니다. 하나는 if 블록의 내부를 방문하고 하나는 그렇지 않습니다. if 조건이 true이면 값이 할당되고 그렇지 않으면 값이 할당됩니다. "그렇지 않다"는 컴파일 오류가 발생했습니다. 그런데 if 조건은 -50보다 작고 +50보다 큰 숫자가 없기 때문에 여기에 절대로 적용될 수 없습니다. –

0

지역 변수는 다음과 같이 .Something를 사용하기 전에 값으로 초기화 할 필요가 지역 변수는 기본적으로 값을 할당하지 않기 때문에

double albedo = 0.0; 

컴파일러는 불평. 따라서 런타임에 if() 조건이 실패하면 변수에 값이 할당되지 않으며이 경우 실행 시간이 함수의 호출자에게 반환되어야하는 경우 어떤 값이 할당됩니까? 따라서 일부 기본값으로 초기화하십시오.

+0

의 사본이어야합니다.이 답변을 읽고 오류가 완벽하게 발생 된 이유를 설명합니다. 분명한 설명을 해주셔서 너무 고맙습니다. 나는 그 생각을하지 못했다고 믿을 수 없습니다! – ninopino1

2

if 절의 조건이 true가 아닌 경우 변수가 할당되지 않습니다. 이 경우 뒤 따르는 반환은 초기화되지 않은 변수를 참조합니다.

+0

이것이 왜 하락했는지 확실하지 않습니다. – Patashu

1

이것은 개인 메서드이며 로컬 변수는 기본값을 갖지 않으므로 초기화해야합니다. 블록이있는 경우 제어가 들어 가지 않는 경우 변수에 값이 없으므로 오류가 발생하는 경우를 생각해보십시오.

관련 문제