在这个脚本中我需要填写一行数字并输入-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);
}
答案 0 :(得分:1)
表达式avg = avg + sum / amount;
可以简化为avg = sum / amount;
。
然而,sum / amount
部分会为您提供int
结果,因为sum
和amount
以及int
都是默认的/
1}}运算符生成int
结果。
所以你必须对(至少)一个操作数进行强制转换,即:
avg = ((double) sum) / amount;
答案 1 :(得分:0)
将int sum转换为float sum,将int amount转换为float amount。 或
avg=((double)sum)/amount;