私は特定の学期の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 course = courseToken.get(x);を使用してください。 int grade = course.getCGrade(); 'で始まる...(あなたは本当にあなたが読んでいる値を変更したいと思っていますか?それは良いアイデアのようには聞こえません。後で同じコース...ネストされたループが必要なのは確かですか? –
またはそれより良い(リストから取得する以外の目的でインデックスを使用しているようではないので)for-eachループを使用します: 'for (コースコース:courseTaken) ' – marstran
if(i> = 97)else if(i> = 89 && i <= 96){...}'、if 2番目の&&ステートメントは常に真で余分です。 – Compass