我正在研究計算特定學期GPA的方法,我的問題是在添加條件語句後成績不會添加到tGrade中。刪除「if」和「else if」會解決我的問題,但它會給出錯誤的輸出,所以關於我可能會做錯什麼的想法?整數不加起來
public double computeGPA(ArrayList<Course> courseTaken) {
double cGPA;
int tGrade = 00;
int tUnits = 00;
for (int x=0; x<courseTaken.size(); x++) {
for(int y=1; y<courseTaken.size(); y++) {
if(courseTaken.get(x).getCGrade()>=97) {
courseTaken.get(x).setCGrade(4);
} else if (courseTaken.get(x).getCGrade()>=89 && courseTaken.get(x).getCGrade()<=96) {
courseTaken.get(x).setCGrade(3);
} else if (courseTaken.get(x).getCGrade()>=80 && courseTaken.get(x).getCGrade()<=88) {
courseTaken.get(x).setCGrade(2);
} else if (courseTaken.get(x).getCGrade()>=74 && courseTaken.get(x).getCGrade()<=79) {
courseTaken.get(x).setCGrade(1);
} else {
courseTaken.get(x).setCGrade(0);
}
tGrade = courseTaken.get(x).getCGrade()+courseTaken.get(y).getCGrade();
tUnits = courseTaken.get(x).getCUnits()+courseTaken.get(y).getCUnits();
}
}
cGPA = (tGrade*tUnits)/tUnits;
return cGPA;
}
到目前爲止,問題是代碼直接導致else語句破壞其他語句。要添加,數據存儲在一個文本文件中,並且課程的每個對象的等級都大於85.
可讀性提示:儘量避免重複呼叫太多。使用課程course = courseToken.get(x); int grade = course.getCGrade();'以...開頭...(你確定你確實想修改你正在閱讀的值嗎?這聽起來不是一個好主意 - 尤其是當你使用以後相同的課程...你確定你甚至需要嵌套循環?) –
或更好(因爲你似乎沒有使用索引除了從列表中檢索),使用for-each循環:'for (課程課程:courseTaken)' – marstran
如果語句除非絕對必要,否則不要包含if if(i> = 97){...} else if(i> = 89 && i <= 96){...}',第二&&陳述總是真實和多餘的。 – Compass