为什么我的阵列不是所有数字的平均值?

时间:2014-03-12 16:50:57

标签: java arrays

我必须为平均值创建一个数组和一个方法调用。但由于某种原因,它不是所有数字的平均值,它只返回最后一个数字。我已经向我的导师求助了,她说数学是正确的,它应该有效。但她没有其他任何帮助。我做错了什么?

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);
}

2 个答案:

答案 0 :(得分:3)

关键在于这一行:

sum / myArray.length

...因为summyArray.length都是整数,所以Java执行整数除法,而不是浮点除法,这实质上意味着它会删除结果的小数部分。

首先将其中一个值转换为double将强制进行浮点除法。

您还将该值存储为int,由于该数组包含双精度数,因此可能会再次引入错误源。在这种情况下你没问题,因为你首先将你放入数组中的所有内容都转换为int,这就引出了为什么你首先使用双数组的问题?

顺便说一句,这有点奇怪:

((Math.random()*500)*1);

这里没有必要将结果乘以1 - 这不会做任何事情。

答案 1 :(得分:0)

这是什么问题?答案正确。请再检查一次。有趣的是,第三个数字总是与三个数字的平均值相同。但平均计算是正确的。这可能是Math.random()在内部生成随机数的方式。第三个是其他两个的平均值。尝试四个或五个数字而不是三个数字并检查你的答案。