有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java整数不能相加

我正在研究一种方法来计算一个特定学期的平均成绩,我的问题是在添加了条件陈述之后,分数不会添加到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


共 (2) 个答案

  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;
    }
    

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

  2. # 2 楼答案

    读了几遍之后,我想到了这个。当然这不是最好的方法(重复调用,对于每个循环可能会越来越好),不过我会继续改进

    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