Java - 小数在计算平均值时保持X.0

时间:2016-02-02 10:15:30

标签: java loops int double decimal

在这个脚本中我需要填写一行数字并输入-1,只要我想停止它。当它停止时,它应该计算并显示数字的总和(总和),填写的数字的数量,不包括-1(数量)和平均值(平均值)。每当我键入10和20这样的数字时,它很好地表明平均值为15.但是当小数必须改变时,例如我键入10和11(所以它必须显示10.5)它只显示10.0因此它是错误的。当avg是双倍时,为什么小数会保留在X.0上?我做错了什么?

public static void main(String[] args) {

    Scanner reader = new Scanner(System.in);
    int sum = 0;
    int amount = 0;
    double avg = 0;

    while (true) {
       System.out.println("Type numbers: ");
       int number = Integer.parseInt(reader.nextLine());
       if (number == -1) {
          break;
       } else {
          amount++;
          sum = sum + number;           
       }  
   }
   avg = avg + sum / amount;

   System.out.println("Thank you and see you later!");
   System.out.println("The sum is: " + sum);
   System.out.println("How many numbers: " + amount);
   System.out.println("Average: " + avg);
}

2 个答案:

答案 0 :(得分:1)

表达式avg = avg + sum / amount;可以简化为avg = sum / amount;

然而,sum / amount部分会为您提供int结果,因为sumamount以及int都是默认的/ 1}}运算符生成int结果。

所以你必须对(至少)一个操作数进行强制转换,即:

avg = ((double) sum) / amount;

答案 1 :(得分:0)

将int sum转换为float sum,将int amount转换为float amount。 或

avg=((double)sum)/amount;