我正在尝试用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);
}
}
答案 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。