有学校任务来查找数组中的总和,平均数和最大数。输入和分析都必须是if循环。这就是我所做的,但总和不起作用,因此平均值也是错误的。我能改进什么?
double average = 0;
int biggest = 0;
int [] arrayx = new int[5];
Scanner stdIn = new Scanner(System.in);
for (int i = 0; i < arrayx.length; i++) {
System.out.println("Write an integer: ");
arrayx[i] = stdIn.nextInt();
average += arrayx[i] /arrayx.length;
if(biggest == 0 || arrayx[i] > biggest)
{
biggest = arrayx[i];
}
}
System.out.println("Sum is: " + (average*arrayx.length));
System.out.println("Average is: " + average);
System.out.println("Biggest number is: " + biggest);
stdIn.close();
答案 0 :(得分:2)
问题是整数除法。
在Java中,当你除以两个整数时,你得到一个整数(丢失小数点以外的任何东西)。
即。 10 / 3 = 3
如果你想要10 / 3 = 3.33333
,你需要将其中一个整数转换为双倍。
所以而不是:
average += arrayx[i] /arrayx.length;
你想做
average += ((double) arrayx[i]) /arrayx.length;
注意:强>
你可以通过删除int数组来提高你的解决方案的效率(除了你见过的最大的东西之外还关心什么吗?)并在循环结束时进行除法。
答案 1 :(得分:1)
问题在于,arrayx[i]
和arrayx.length
都是整数,a.k.a整数。
因此,当划分时,使用整数除法,其取整除部分的结果。
例如,整数除法中的7 / 2
为3
。
所以你每次都要加avarage
一个整数,而你想要一个浮点除法
您可以将其中一个数字转换为double
以强制进行FP划分:
average += (double)arrayx[i] /arrayx.length;
通常,最好将总和计算为整数,然后进行除法:
sum += arrayx[i];
...
double average = (double)sum / arrayx.length; // Casting here too for FP division.
实际上,根本不需要数组 - 只在循环范围内使用它的项目,无论如何都使用它,并且你知道它在编译时的长度。
答案 2 :(得分:0)
您检查最大值也不正确。
如果您向计划提供输入:{-3, -2, -1, 0, -100}
。
在你的循环结束时,最大值将设置为-100
。
您的if语句应更改为:
if(i == 0 || arrayx[i] > biggest)
i
等于已经处理的int
的数量。