所以我在介紹的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