为什么我需要初始化?
问题描述:
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等级”?为什么我需要初始化?
谢谢。
答
您的if/else构造不包含所有代码分支。如果testScore
小于零,则grade
将被单元化并且您的System.out.println
调用将失败。
答
有可能没有一个if..else if
是真的。因此,您应该初始化grade
或在底部添加else
条件。
答
Java不知道你的testScore
永远不是负面的(在更复杂的情况下它不能推断出这些信息)。因此,可能没有任何if条款成立,变量grade
将被单元化。
答
你可以声明它为“char等级”,但你需要一个else语句。
比方说,你有char grade;
,而不是char grade = 'A';
我们还假设,假设,testscore
是一个负数。
如果没有将grade
初始化为一个字母,编译器会越过所有条件。java编译器希望确保在继续之前覆盖您的所有基础。根据您的程序要求,我会将最后的声明更改为else
声明,而不是else if
。
答
我将保留变量未初始化,并让编译器告诉我,有一个代码分支不会为变量赋值。这告诉你并不是所有可能的输入都被处理。当前代码的负值是A,这是不正确的。
我会添加一个额外的else语句来打印错误消息并退出。然后,编译器将接受未初始化的变量,并且覆盖所有输入路径(期望输入非数字,这会在调用nextInt()时产生异常。)