2013-01-17 207 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; }後面聲明來解決此問題。