Java 整数不能相加

Java 整数不能相加,java,arraylist,Java,Arraylist,我正在研究一种方法来计算一个特定学期的平均成绩,我的问题是在添加了条件陈述之后,分数不会添加到tGrade中。删除ifs和else ifs可以解决我的问题,但它会给出错误的输出,所以有没有关于我可能做错了什么的想法 public double computeGPA(ArrayList<Course> courseTaken) { double cGPA; int tGrade = 00; int tUnits = 00; for (int x=0;

我正在研究一种方法来计算一个特定学期的平均成绩,我的问题是在添加了条件陈述之后,分数不会添加到tGrade中。删除ifs和else ifs可以解决我的问题,但它会给出错误的输出,所以有没有关于我可能做错了什么的想法

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。

因此,经过一些阅读,我得出了这个结论。当然,这不是执行itrepetitive调用的最佳方法,因为每个循环都可能越来越好,不过我会继续改进

public double computeGPA(ArrayList<Course> courseTaken) {
    double cGPA;
    double tUnits = 00;
    double tGrade = 00;

    for(int y=0; y<courseTaken.size(); y++) {
        tUnits += courseTaken.get(y).getCUnits();
    }

    for(int x=0; x<courseTaken.size(); x++) {
        if(courseTaken.get(x).getCGrade()>=97) 
            tGrade += courseTaken.get(x).getCUnits()*4;
         else if(courseTaken.get(x).getCGrade()>=93 && courseTaken.get(x).getCGrade()<=96) 
            tGrade += courseTaken.get(x).getCUnits()*3.5;
         else if(courseTaken.get(x).getCGrade()>=89 && courseTaken.get(x).getCGrade()<=92) 
            tGrade += courseTaken.get(x).getCUnits()*3;
         else if(courseTaken.get(x).getCGrade()>=85 && courseTaken.get(x).getCGrade()<=88) 
            tGrade += courseTaken.get(x).getCUnits()*2.5;
         else if(courseTaken.get(x).getCGrade()>=80 && courseTaken.get(x).getCGrade()<=84) 
            tGrade += courseTaken.get(x).getCUnits()*2;
         else if(courseTaken.get(x).getCGrade()>=75 && courseTaken.get(x).getCGrade()<=79) 
            tGrade += courseTaken.get(x).getCUnits()*1.5;
         else if(courseTaken.get(x).getCGrade()>=70 && courseTaken.get(x).getCGrade()<=74) 
            tGrade += courseTaken.get(x).getCUnits()*1;
         else 
            tGrade += courseTaken.get(x).getCUnits()*0;

    }
    cGPA = tGrade/tUnits;

return cGPA;
}//computeGPA

为了可读性和效率,我建议查看switch语句,而不是使用大量if语句

例如,如果:

If (x==1){ }
If (x==2){ }
…等等,您只需测试一个变量,并检查用例即可

Switch(x){
    case 1: 
          System.out.print("1")
          break;
    case 2:
       System.out.print("2")
         break;
}

无论您要测试多少个值。对不起,如果写得不太好,我现在正在打电话

可读性提示:尽量避免这么多重复调用。使用Course=courseToken.getx;int grade=course.getCGrade;一开始您确定要修改正在读取的值吗?这听起来不是一个好主意-尤其是当你以后使用相同的课程时。。。你确定你甚至需要嵌套循环吗?或者更好,因为除了从列表中检索之外,你似乎不使用任何索引,所以对每个循环都使用:for Course-Course-coursetaken不要将if语句括起来,除非绝对必要ifi>=97{…}else-ifi>=89&&i@JonSkeet-yeah,我在考虑修改成绩值,但由于我不会重写文本文件,并且需要再次阅读,因此我最终得出了结论,但由于您提出了这一点,因此我将采用另一种方法。谢谢如果我正确阅读了你的代码,在y的第一个循环之后,courseTaken.getx.getCGrade将始终在else块中结束,因为你通过你的语句将等级设置为<5:courseTaken.getx.setCGrade4;我在代码中使用switch语句的问题是,我设置的条件是值si.e的范围。93到96,而不是特定的值,如果我使用switch语句,那么我将得到更多的代码行。不过如果我只处理大约8到10个特定的值,我会考虑这个问题。