Java GPA逻辑错误

时间:2011-11-21 23:30:41

标签: java

我正在尝试用Java创建一个简单的GPA计算程序,但我在某处出现逻辑错误导致答案不正确。

我的第一个测试值是87.3%的等级和3的信用值,等级为74.2%,信用等级为3.0。我得到4.0的答案,如果我打印gradePointTotal或者应该命名为加权信用值,那么我得到24.0而不是21.0。

public class lab5{

     public static void main(String[] args){
             double gradeTotal = 0;
             double gradeAverage = 0;
             double creditValueTotal = 0;
             double gradePoint = 0;
             double gradePointTotal = 0;
             int counter = 1;

             Scanner input = new Scanner(System.in);
             Scanner input2 = new Scanner(System.in);
             String repeat;
             do {
             System.out.print("Enter a grade: ");
             double grade = input.nextDouble();
             System.out.print("Enter credit value: ");
             double creditValue = input.nextDouble();
             System.out.print("Enter Another course ? (YES/NO) ");
             repeat = input2.next();
             gradeTotal += grade;
             gradeAverage = gradeTotal / counter;
             creditValueTotal += creditValue;

             if (gradeAverage >= 80)
            gradePoint = 4.0;
     else if (gradeAverage >= 75)
            gradePoint = 3.5;
     else if (gradeAverage >= 70)
            gradePoint = 3.0;
     else if (gradeAverage >= 65)
            gradePoint = 2.5;
     else if (gradeAverage >= 60)
            gradePoint = 2.0;
     else if (gradeAverage >= 50)
            gradePoint = 1.0;
     else if (gradeAverage < 50)
            gradePoint = 0.0;

     gradePointTotal += gradePoint * creditValue;

     counter++;
             }
             while("YES".equalsIgnoreCase(repeat) || "y".equalsIgnoreCase(repeat));

             double gradePointAverage = gradePointTotal / creditValueTotal;

     System.out.println(gradePointAverage);



     }

}

3 个答案:

答案 0 :(得分:1)

首先,这里有很多错误。你正在学习,所以没关系。关于编程要记住的事情是,你是出于某种原因编写代码行。每行代码都有一个特定的存在理由。看看你的代码,我看到一些混乱。您不明白每行代码的作用。例如,您有输入,输入2.为什么? (提示,你可能对System.in的作用感到困惑)。

在编写任何代码之前,您需要做的是写下您想要做的事情的英文描述。它应该是这样的:

//步骤1:在用户完成输入之前反复询问课程分数和GPA

//第2步:添加用户输入的所有分数。除以条目数。

//第3步:打印输出

然后,您可以开始清除每个词干的详细信息

//步骤1a)获取命令行用户界面的句柄以获取数据(System.in) ..等等

基本上,你从高级大纲开始,然后清除细节..最后的细节是你的代码行。这有利于自我评论代码,因此您的教师和其他人不仅可以阅读您正在做什么,还可以阅读为什么这样做。你也可以找到合适的函数调用或系统资源来做你想做的事情,而不是拥有一些你不知道它做什么的资源,并试图让它做你想做的事。

答案 1 :(得分:0)

尝试删除您计算gradeAverage的行。由counter划分给定的等级,或者甚至首先使用计数器,对我来说没有意义。另外,在每个if-else-if的条件下使用grade

答案 2 :(得分:0)

最好采用gradePointAverage的平均值。

CreditValue Total = CreditValue;
GradePointTotal = GradePoint*CreditValue;
double gradePointAverage += gradePointAverage + (GradePointTotal/CreditValueTotal);
double GPA = gradePointAverage / count;

通过不递增信用总额和成绩点总数,每次重新输入循环时都会重新分配。但是,增加gradePointAverage可以让您继续添加它。然后你取平均值得到平均gpa。