我正在研究计算特定学期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