变量可能尚未初始化,不明白为什么

时间:2013-01-17 00:28:35

标签: java

所以我参加了一个简介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;

修改

我把它改成了这个并且仍然得到同样的信息......

{{1}}

3 个答案:

答案 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仍然可以为空。因此,只需将平均值计算得到如上所述。