平均成绩数学无法正确显示

时间:2014-10-03 05:50:39

标签: java loops average

不能为我的生活弄清楚为什么我的平均值没有正确显示我已经看了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");
           }
    }
}

3 个答案:

答案 0 :(得分:2)

这里的问题是整数除法。

averageExamScore = sum/numStudent;

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

  • 如果你将商的一部分投射到double,你就会失去精确度(并且编译失败)

    示例:

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

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

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

答案 1 :(得分:1)

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

e.g。

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

averageExamScore变为双精度,并将其他整数投射为双精度。

修改

打印出来

DO

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

答案 2 :(得分:0)

完成以下代码,

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变量应为double,否则无法存储浮点值

祝你好运!!!