所以我参加了一个简介Java课程,制作了一个成绩计算器,增加了在这组条件下调整成绩的任务:
如果学生已完成奖金工作:
首先对考试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;
修改
我把它改成了这个并且仍然得到同样的信息......
{{1}}
答案 0 :(得分:3)
如果bonus
不等于"yes"
,则永远不会设置g1n
。
答案 1 :(得分:1)
设置g1n
的唯一位置是if (bonus.equals("yes"))
子句。如果bonus
不等于"yes"
,则永远不会设置g1n
。您现有的else
向第二个else
提供if
。您不能将不存在的变量添加到另一个变量。
如果g1n
不等于"yes"
,您可以浏览您的计划。除非g1n
,否则无法为bonus.equals("yes")
分配值。
通过在if
子句else { g1n = 0; }
之后说明来解决这个问题。
答案 2 :(得分:0)
那是因为g1n可能没有被初始化。
if (bonus.equals("yes")) { // if bonus is yes
if (((double)g2 * 0.8) > g1) {
g1n = ((double)g2 * 0.8);
}
else {
g1n = (double)g1;
}
// compute average
avg = (g1n + (double)g2 + (double)g3)/3;
}
如果奖金不是“是”,那么g1n仍然可以为空。因此,只需将平均值计算得到如上所述。