2014-02-17 4 views
1

그래서 난 내 프로그램이 오류가 발생했습니다 :Java가 내 변수가 초기화되지 않았다고 말하는 이유는 무엇입니까?

BankChargesWilson.java:55: error: variable checksCost might not have been initialized 
    System.out.println("Your total cost is " + money.format(checksCost) + "."); 
                 ^
1 error 

하지만이있을 때 서식 개체가 생성 된 이유를 이해하지 않고 나는 checksCost 변수 이전 초기화.

개체와 내 정의를 강조합니다.

그리고 사용되는 곳에서 출력이 나와 오류가있는 부분이있는 else-if 문이 있습니다.

if (checksWritten < 20) 
    { 
    checksCost = checksWritten * 0.10; 
    } 

    else if (checksWritten >= 20 && checksWritten <= 39) 
    { 
    checksCost = checksWritten * 0.08; 
    } 

    else if (checksWritten >= 40 && checksWritten <= 59) 
    { 
    checksCost = checksWritten * 0.06; 
    } 

    else if (checksWritten >= 60) 
    { 
    checksCost = checksWritten * 0.04; 
    } 

    System.out.println("You entered that you wrote " + checksWritten + " checks this month."); 
    System.out.println("Your total cost is " + money.format(checksCost) + "."); 

더 이상 초기화되지 않는다고 말하는 이유가 확실하지 않습니다.

질문 : checksCost가 내 if-else-if 루프의 범위에서만 보이고 있습니까? 그렇다면 위에 정의 된 이유는 무엇입니까?

+4

'if/else' 블록이 하나도 실행되지 않으면 어떻게됩니까? –

+0

당신의 구현에서 불가능하다는 것을 잊어 버리십시오, 컴파일러는 그것을 보장 할 수 없습니다. –

답변

3

컴파일러는 사용자가 상상하는 것처럼 코드를 깊이 분석하지 않기 때문에.

if/else 체인은 조건에 따라 확실히 분기를 실행하지만 else 조건이 누락되었다는 사실에 대해 불평하는 컴파일러는이 결과를 인식하지 못합니다.

변수를 초기화하거나 else if을 간단하게 else (이 특정 경우의 의미를 변경하지 않음)으로 두어 문제를 해결할 수 있습니다.

0

checksCost 변수의 초기 값을 설정해야합니다. 값이 설정되지 않는 경우가있을 수 있습니다. 조건부 논리에 맞지 않는 상황이있을 수 있습니다.

+0

왜 아래 표를 ?? –

+0

나는 특히 "교육적이지 않았기 때문에"본래의 답을 "당신은 checksCost 변수의 초기 값을 설정해야합니다"라고 답했다. 편집을 마치면 취소되지 않았습니다. –

2

기본 초기 값을 제공해야하거나 블록을 else 제공하고 거기에 값을 제공해야합니다.

이유는 모든 조건이 실행되지 않은 것입니다.

당신이 다른 블록을 제공, 항상 if 또는 else

더블 checksCost에서 하나의 값을 할당 할 수있는 기회가 있다는 것을 확실하다;

if(){ //false 
} 
else if(){ //false 

} 

무엇입니까 checksCost 값은 무엇입니까 ??

2

예, 귀하의 checksCost 변수는 초기화 된 블록 (이 경우에는 for 루프 섹션 내)에서만 볼 수 있습니다.

위의 선언 된 경우에도 if-else 문의 블록에서 볼 수있는 이유는 내부 블록이 자체 외부의 코드에 액세스 할 수 있지만 그 반대가 사실이 아니기 때문입니다.

0

Java 컴파일러는 변수를 초기화해야합니다. 컴파일 할 때 코드의 논리를 검사하지 않으므로 "else if"가 일치하지 않으면 변수가 초기화되지 않을 가능성이 있다고 생각합니다. if/else 부분 앞에 checkCost를 초기화하거나 else {double = smth; } if/else 절을 ​​끝내십시오.

0

checksWritten0 인 경우 checksCost은? 그 번호에 checksCost을 초기화하십시오. 같은 줄에 따라 checksWritten부터 0까지 초기화해야합니다. 또한 방금 else 블록을 남기지 마십시오. 방금 발견 한 것처럼 부서지기 쉬운 코드로 연결되기 때문입니다. 이 경우 마지막 else ifelse으로 변경하십시오.

관련 문제