我必须为平均值创建一个数组和一个方法调用。但由于某种原因,它不是所有数字的平均值,它只返回最后一个数字。我已经向我的导师求助了,她说数学是正确的,它应该有效。但她没有其他任何帮助。我做错了什么?
public static void main(String[] args) {
double[] myArray = new double[2];
initialize(myArray);
double avg = getAverage(myArray);
System.out.println(avg);
output(avg);
}
public static void initialize(double[] myArray) {
//myArray = new double[1000];
for(int i = 0; i < myArray.length; i++) {
myArray[i] = (int) ((Math.random()*500)*1);
System.out.println(myArray[i]);
}
}
/**
*
* @param myArray
* @return
*/
public static double getAverage(double[] myArray) {
int sum = 0;
for (int i = 0; i < myArray.length; i++) {
sum += myArray[i];
}
return sum / myArray.length;
}
public static void output(double avg) {
System.out.println("The average is " + avg);
}
答案 0 :(得分:3)
关键在于这一行:
sum / myArray.length
...因为sum
和myArray.length
都是整数,所以Java执行整数除法,而不是浮点除法,这实质上意味着它会删除结果的小数部分。
首先将其中一个值转换为double
将强制进行浮点除法。
您还将该值存储为int,由于该数组包含双精度数,因此可能会再次引入错误源。在这种情况下你没问题,因为你首先将你放入数组中的所有内容都转换为int,这就引出了为什么你首先使用双数组的问题?
顺便说一句,这有点奇怪:
((Math.random()*500)*1);
这里没有必要将结果乘以1 - 这不会做任何事情。
答案 1 :(得分:0)
这是什么问题?答案正确。请再检查一次。有趣的是,第三个数字总是与三个数字的平均值相同。但平均计算是正确的。这可能是Math.random()在内部生成随机数的方式。第三个是其他两个的平均值。尝试四个或五个数字而不是三个数字并检查你的答案。