2013-01-17 152 views
2

所以我在介绍的Java当然是,使一个档次的计算器在这组条件调整等级的附加任务:变量可能尚未初始化,不明白为什么

如果学生有完成奖励工作:

  • 的考试1级或者是:考试2的成绩的
    • 80%,如果它比原来的考试1级以上,或
    • 原考试1级。
  • 的考试2级或者是:检查3的级的
    • 80%,如果它是比原来的考试2级更高,或
    • 原始考试2级。

修改总是对考试1制备第一。

我已经试过这首先与考试1级,尝试分配g1ng2 * 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; 
+0

您刚刚将问题从一个分支移至另一个分支。如果你的第一个“if”,你有两个“if”,但不是“else”。这意味着它有可能进入第一'if'('bonus'等于'“是”'),但不输入任何内'if's(小'g2'和小'g3')的。发生此错误是因为您没有考虑所有情况。您应该初始化变量或覆盖所有可能的分支。 – pgreen2

回答

3

如果bonus不等于"yes",然后g1n永远不会设置。

+0

现在它很痛苦清楚。谢谢! – user1985543

+0

只需用'g1n = g1'添加一个else。 – pgreen2

+0

评论格式失败...编辑帖子 – user1985543

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; 
} 

如果奖励不是“yes”,g1n仍然为空。因此,只需将平均值计算转化为如上所述的if。

1

g1n设置的唯一位置在if (bonus.equals("yes"))子句中。如果bonus不等于"yes",则从不设置g1n。您现有的else向第二个if提供了else。你不能将一个不存在的变量添加到另一个变量中。

如果g1n不等于"yes",则可以通过程序追踪。除非bonus.equals("yes"),否则它没有任何值给g1n

通过在if子句else { g1n = 0; }后面声明来解决此问题。