2011-06-14 6 views
1
import java.util.Scanner; 

class Practice { 

public static void main(String args[]) {   


    System.out.println("Please enter your test score: "); 
    Scanner enteredScore = new Scanner(System.in); 
    int testScore = (enteredScore.nextInt()); 


    char grade = 'A';   

    if (testScore >= 90) { 
     grade = 'A';    
    }     
    else if (testScore >= 80) { 
     grade = 'B'; 
    }     
    else if (testScore >= 70) { 
     grade = 'C'; 
    }   
    else if (testScore >= 60) { 
     grade = 'D'; 
    }   
    else if (testScore >= 0) { 
     grade = 'U'; 
    } 


    System.out.println("Your grade is a " + grade + "."); 

} 
} 

누군가 내가 "char grade = 'A';를 초기화해야하는 이유를 설명해 줄 수 있습니까? 내 "if"문 앞에 단순히 "char grade"라고 선언하기보다는?왜 이것을 초기화해야합니까?

감사합니다.

답변

6

if/else 구문이 모든 코드 분기를 다루지 않습니다. testScore이 0보다 작 으면 grade이 단위 화되며 System.out.println 호출이 실패합니다.

8

if..else if에 해당하지 않을 가능성이 있습니다. 따라서 grade을 초기화하거나 하단에 else 조건을 추가해야합니다.

1

Java는 사용자의 testScore이 부정적 적이 지 않으며 (더 복잡한 경우에는 그러한 정보를 추론 할 수 없음) Java가 알지 못합니다. 따라서 if 절이 하나도 없으며 변수 grade이 단위 화 될 수 있습니다.

3

"char 등급"으로 선언 할 수 있지만 else 문이 필요합니다.

의 당신이,의는 또한 가정 해 봅시다 가정 해, testscore가 음수했다 char grade; 대신 char grade = 'A';

을 가지고 있다고 가정 해 봅시다.

grade이 문자로 초기화되지 않으면 컴파일러가 if 조건을 모두 지나칠 수 있습니다. Java 컴파일러는 진행하기 전에 모든 기반을 다룰 수 있는지 확인하려고합니다. 프로그램 요구 사항에 따라 else if이 아닌 else 문으로 마지막 문을 변경합니다.

1

변수를 초기화하지 않고 컴파일러에서 변수에 값을 할당하지 않는 코드 분기가 있음을 알리십시오. 이것은 가능한 모든 입력이 처리되는 것은 아니라는 것을 알려줍니다. 현재 코드에서 음수 값은 A가되고 올바르지 않습니다.

오류 메시지를 인쇄하고 종료하는 추가 else 문을 추가합니다. 그런 다음 컴파일러에서 초기화되지 않은 변수를 받아들이고 모든 입력 경로를 처리합니다 (숫자가 아닌 입력을 기대하면 nextInt() 호출시 예외가 발생합니다.)

관련 문제