为什么我需要初始化这个?

时间:2011-06-14 17:51:57

标签: java initialization char

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;”?

感谢。

5 个答案:

答案 0 :(得分:8)

if..else if中没有一个是真的。因此,您应该初始化grade或在底部添加else条件。

答案 1 :(得分:6)

您的if / else构造未涵盖所有代码分支。如果testScore小于零,grade将被整理,您的System.out.println调用将失败。

答案 2 :(得分:3)

你可以将它声明为“char grade”,但你需要一个else语句。

假设您有char grade;而不是char grade = 'A';

我们还要说,假设testscore是一个负数。

编译器会在没有grade初始化为字母的情况下超过所有if条件。在您继续操作之前,java编译器希望确保您已覆盖所有基础。根据您的计划要求,我会将最后一个语句更改为else语句而不是else if

答案 3 :(得分:1)

Java并不知道您的testScore永远不会消极(在更复杂的情况下,它无法推断出此类信息)。因此,可能没有if子句成立且变量grade将被酉化。

答案 4 :(得分:1)

我会保留变量未初始化,让编译器告诉我有一个代码分支没有为变量赋值。这告诉您并非所有可能的输入都在处理中。如果您是当前代码,则负值是A,这是不对的。

我会添加一个额外的else语句来打印错误消息并退出。然后编译器将接受未初始化的变量并覆盖所有输入路径(期望非数字输入,这将在调用nextInt()时产生异常。