所以我在介绍的Java当然是,使一个档次的计算器在这组条件调整等级的附加任务:变量可能尚未初始化,不明白为什么
如果学生有完成奖励工作:
- 的考试1级或者是:考试2的成绩的
- 80%,如果它比原来的考试1级以上,或
- 原考试1级。
- 的考试2级或者是:检查3的级的
- 80%,如果它是比原来的考试2级更高,或
- 原始考试2级。
修改总是对考试1制备第一。
我已经试过这首先与考试1级,尝试分配g1n
值g2 * 0.8
如果(g2 * 0.8) > g1
,并给它,否则的g1
值。我无法看到g1n
未被初始化,因为在我看来,我刚刚列出的条件是详尽无遗的。
下面是我的代码的相关部分。是什么赋予了?
// declare variables
int g1;
int g2;
int g3;
char grade;
double g1n;
double g2n;
double avg;
String bonus;
// get input
System.out.println("*************** Grade Computer *************");
System.out.println("Enter the student's first name: ");
String first = input.next();
System.out.println("Enter the student's middle initial: ");
String mid = input.next();
System.out.println("Enter the student's last name: ");
String last = input.next();
System.out.println("Enter EXAM 1 grade: ");
g1 = input.nextInt();
System.out.println("Enter EXAM 2 grade: ");
g2 = input.nextInt();
System.out.println("Enter EXAM 3 grade: ");
g3 = input.nextInt();
System.out.println("Was bonus work done? [yes/no]: ");
bonus = input.next();
System.out.println(g1 + " " + g2 + " " + g3 + " " + bonus);
// adjust exam scores if necesssary
if (bonus.equals("yes")) {
if (((double)g2 * 0.8) > g1) {
g1n = ((double)g2 * 0.8);
} else {
g1n = (double)g1;
}
}
编辑:
我改成了这一点,我仍然得到同样的消息...
if (bonus.equals("yes")) {
if (((double)g2 * 0.8) > g1) {
g1n = ((double)g2 * 0.8);
}
if (((double)g3 * 0.8) > g2) {
g2n = ((double)g3 * 0.8);
}
} else {
g1n = (double)g1;
g2n = (double)g2;
}
// compute average
avg = (g1n + (double)g2 + (double)g3)/3;
您刚刚将问题从一个分支移至另一个分支。如果你的第一个“if”,你有两个“if”,但不是“else”。这意味着它有可能进入第一'if'('bonus'等于'“是”'),但不输入任何内'if's(小'g2'和小'g3')的。发生此错误是因为您没有考虑所有情况。您应该初始化变量或覆盖所有可能的分支。 – pgreen2