整数不会加起来

时间:2016-10-10 16:21:09

标签: java arraylist

我正在研究一种计算特定学期GPA的方法,我的问题是在添加条件语句后,成绩不会添加到tGrade。删除" if" s"否则如果" s会解决我的问题,但它会输出错误的输出,所以任何关于我可能做错的想法?​​

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。

2 个答案:

答案 0 :(得分:0)

所以经过一些阅读后,我就想到了这一点。当然不是最好的方法(重复调用,每个循环可能更好,更多),但我会继续改进它。

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

答案 1 :(得分:-1)

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

例如,如果:

If (x==1){ }
If (x==2){ }

......依此类推,你可以测试一个变量,并检查一下使用情况。

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

无论您想测试多少个值。对不起,如果它写得不好我会在我的手机上分钟。