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;”?
感谢。
答案 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()时产生异常。