我需要显示用户输入的一系列整数的正确算术平均值。如果用户输入6、9、7和4,则平均值应为6.5,但显示为6.0。为什么会发生这种情况?我使用ArrayList来存储所有的整数。
import java.util.Scanner;
import java.util.*;
import java.util.Collections;
public class QuizScoreStatistics
{
public static void main(String[] args) {
List<Integer> Scores = new ArrayList<Integer>();
Scanner input = new Scanner(System.in);
int i = 0;
int a = 0;
while(a != 99) {
System.out.println("Enter scores");
a = input.nextInt();
if(a != 99) {
if ( a > 10 || a < 0) {
System.out.println("Score must be between 10 and 0");
}
else {
Scores.add(a);
}
i++;
}
}
int max = Collections.max(Scores);
int min = Collections.min(Scores);
int sum = 0;
double averg = 0;
for( i = 0; i <= Scores.size() - 1; i++) {
sum += Scores.get(i);
}
averg = sum / Scores.size();
System.out.println("Scores entered " + i);
System.out.println("Highest score " + max);
System.out.println("Lowest score "+ min);
System.out.println("Average: "+ averg);
}
}发布于 2020-04-20 07:18:15
我不会试图透露整个问题,我认为只要你朝着正确的方向推动,你自己可能会回答这个问题。
你正确地识别出你的averg是一个双精度的,因为你的答案可能是6.7或2.3之类的东西。这是一个正确的假设!然而,在你的“算术过程”中,你使用整数来做除法,这将是一个整数。我将重复两个整数的实际除法,你能看到bug来自哪里吗?
如果您需要更深入地了解此解决方案的确切解决方案,我会在这里向您指出https://programming.guide/java/wrong-results-for-division.html
发布于 2020-04-20 07:15:37
试试averg = (1.0 *sum) / Scores.size();
因为int/int => int而是double/int=>double
发布于 2020-04-20 08:07:42
好的,这就是运算符"/“的工作方式。
int / int => int
int / float => float
float / int => float由于您正在进行int除法(int/int),因此结果将是一个int,丢失小数信息。如果您希望除法是浮点型或双精度型,您有两个选择,要么将和声明为双精度型,要么直接转换除法,这样它就变成了双精度除法而不是整型除法。
averg = (double) sum / Scores.size();https://stackoverflow.com/questions/61312861
复制相似问题