Java GPA程序问题

3

我的程序出现了问题,计算GPA平均值时出现错误。如果我输入3次4.0,那么它会显示平均GPA为3.0,但实际上应该是4.0。有没有人能帮我找出问题所在?

//variables
double gpa = 0;
double total = 0;
int counter = 0;
int counter2 = 0;

do
{
    String gpaEntry = JOptionPane.showInputDialog("Please enter GPAs:");
    gpa = Double.parseDouble(gpaEntry);

    if (gpa >= 3.5)
        counter2 ++;

    total += gpa;
        counter ++;
}
while (gpa != 0);

double average = (double) (total/counter);

JOptionPane.showMessageDialog(null, "The Average GPA is: " + average);
JOptionPane.showMessageDialog(null, "Number of students:" + counter2);

2
0算作一个条目吗? - Sotirios Delimanolis
2
我不想要它这样做。我希望0可以停止输入GPA,然后程序继续运行。 - Saverio
2
好的,那你为什么不这样做呢? - Sotirios Delimanolis
2
我以为我做对了。你能给个提示如何解决这个问题吗? - Saverio
3
用纸笔逐行检查你的代码。输入0后会发生什么? - Sotirios Delimanolis
2
它应该停止do循环并开始计算平均值。 - Saverio
2个回答

5

让我们来看一下这段代码

  • gpa = 0
  • 获得用户输入(用户输入“2”)
  • 现在 gpa = 2
  • total += 2
  • counter ++
  • while(gpa != 0) // 不行,gpa 是 2
  • 回到循环开始
  • 获得用户输入(用户输入“0”)
  • 现在 gpa = 0
  • total += 0
  • counter ++ // 哎呀!
  • while(gpa != 0) // 是的,退出循环

但现在已经太晚了,我们已经增加了 counter,所以我们的 average 计算是错误的


那我应该使用 if / else 语句来检查是否为0,然后继续执行程序吗? - Saverio
有几种方法可以解决它。1)像@ikhalq15一样移动/复制用户输入代码。2)在获取用户输入后添加if(gpa==0) break。3)或者if(gpa!=0)counter++。4)在循环结束后执行counter-- - jb.
谢谢!我用了选项2。 - Saverio
还有一个问题,如果我使用if(gpa==0) break选项。那么我该怎么处理代码末尾的while (gpa != 0)呢? - Saverio
你不再需要它了,你可以将它更改为while(true) - jb.

0

问题在于如果用户输入0,那么程序会运行然后退出。

尝试这段代码(抱歉,我现在没有编辑器,所以你可能需要修复一些小问题)。

//variables
double gpa = 0;
double total = 0;
int counter = 0;
int counter2 = 0;

String gpaEntry = JOptionPane.showInputDialog("Please enter GPAs:");
gpa = Double.parseDouble(gpaEntry);

while (gpa != 0) {
    if (gpa >= 3.5)
        counter2 ++;

    total += gpa;
    counter ++;

    gpaEntry = JOptionPane.showInputDialog("Please enter GPAs:");
    gpa = Double.parseDouble(gpaEntry);
}

JOptionPane.showMessageDialog(null, "The Average GPA is: " + average);
JOptionPane.showMessageDialog(null, "Number of students:" + counter2);

如果您有任何更多的问题,请留言。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接