【问题标题】:Averaging grades math not displaying correctly平均成绩数学未正确显示
【发布时间】:2014-10-03 05:50:39
【问题描述】:

我一生都无法弄清楚为什么我的平均值显示不正确我已经看了大约 2 个小时。

import java.util.Scanner;
public class midterm
{
    public static void main(String[] args)
    {
       Scanner keyboard = new Scanner(System.in);
       int examScore =0;
       int averageExamScore = 0;
       int numStudent=0;
       int sum=0;

       while(examScore >= 0)
           {
            System.out.println("Enter exam scores (enter negative number to quit): ");
            examScore = keyboard.nextInt();
            numStudent++;
            sum = sum + examScore;
          }
       if(numStudent > 0)
           {
              averageExamScore = sum/numStudent;

           }
        else
           {
              System.out.println("No scores to average");
           }
    }
}

【问题讨论】:

  • int/int 将产生一个 int 并且 smallNumber/largeNumber 将产生 0 作为结果,averageExamScore = (double)sum/numStudent
  • 而你还没有输出averageExamScore,
  • 哇,看到这个我已经累了,哎呀。

标签: java loops average


【解决方案1】:

这里的问题是整数除法。

averageExamScore = sum/numStudent;

这三个参数都是整数,这意味着:

  • 如果您将商的一部分转换为 double,您将失去精度(并且编译失败)

    例子:

     averageExamScore = (double)sum/numStudent; // wouldn't compile
    
  • 提供了商 sum/numStudent 的底数而不是整数(因此对于像 4.9 这样的数字,您将得到 4)。

您可以通过以下几种方式解决此问题:

  • averageExamScore 声明为double。这是必需的。
  • sumnumStudent 转换为double,或将其类型更改为double

【讨论】:

  • 非常感谢,我想已经太晚了,我忘记了基础知识哈哈
【解决方案2】:

您已将averageExamScore 定义为整数,因此将应用整数运算。

例如

 5 / 2 == 2
 1 / 2 == 0

averageExamScore 转换为双精度数,并将其他整数转换为双精度数。

编辑

打印出来

 if(numStudent > 0)
 {
   averageExamScore = sum/numStudent;
   System.out.println ("average score is " + averageExamScore );
 }

【讨论】:

  • 假设numStudent不止一个,永远不会进入else块
  • 我认为这可能是问题所在,但它并没有改变任何东西。
【解决方案3】:

通过以下代码,

public class MidTerm {

 public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);
    int examScore = 0;
    double averageExamScore = 0;
    int numStudent = 0;
    int sum = 0;

    while (true) {
        System.out.print("Enter exam scores (enter negative number to quit): ");
        examScore = keyboard.nextInt();
        if (examScore >= 0) {
            numStudent++;
            sum += examScore;
        } else break;
    }

    if (numStudent > 0) {
        averageExamScore = sum / numStudent;
        System.out.println("Avarage score is : " + averageExamScore);
    } else System.out.println("No scores to average");
 }

}

  • averageExamScore 变量应为双精度,否则无法存储浮点值

祝你好运!!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 2021-01-16
    相关资源
    最近更新 更多