需要返回数组列表的平均值

时间:2014-04-02 11:51:57

标签: java arraylist average

我正在尝试计算数组列表的平均值。到目前为止,数字被加在一起,但是当我尝试将它们除以数组的大小时,它不起作用。

这是我的代码:

public int mean (ArrayList<Integer> number)

{
    int sum = 0;
    int counter = 0;

    for (Integer meanInt :number)
    {
        sum+=meanInt;
        counter++;
    }
        return sum / counter;
}

6 个答案:

答案 0 :(得分:2)

return sum / counter;

如果counter为零(如果number为空),则可能会导致错误。你应该照顾好。

另请注意,您的签名应为double,而不是int。你应该明确地施展其中一方:

return (double)sum / counter;

答案 1 :(得分:1)

在Java8中,人们可以使用流和方法引用,如:

public float mean (ArrayList<Integer> number) {
    if (number != null && number.size() > 0)
        return (number.stream().reduce(0, Integer::sum) / (float)number.size());
    else
        return 0;
}

答案 2 :(得分:0)

您将返回int,这将截断该值。

您可以使用真实类型,例如floatdouble,或更好:

return new BigDecimal(String.valueOf(sum))
    .divide(new BigDecimal(String.valueOf(number.size())))
    .doubleValue();

注意

您不需要ArrayList大小的计数器,只需使用上述size()方法即可。

答案 3 :(得分:0)

整数除法截断小数部分。相反,返回float并将其中一个操作数强制转换为float以确保正确的数学:

您还可以免除counter

public float mean (List<Integer> numbers) {
    int sum = 0;
    for (Integer number : numbers) {
        sum += number;
    }
    return (float)sum / numbers.size();
}

还要注意使用更典型的变量名称。

答案 4 :(得分:0)

这应该有效:

public static void main(String[] args) {
    int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8 };
    int sum = 0;
    for (int number :numbers) sum += number;
    System.out.printf("The sum is: %f\n", (float) sum / numbers.length);
}

答案 5 :(得分:0)

返回双倍值平均值也可以加倍

public static double mean(List<Integer> list) {
   if (list == null || list.isEmpty())
    return 0.0;
long sum = 0;
int n = list.size();
   for (int i = 0; i < n; i++)
    sum += list.get(i);
return ((double) sum) / n;
}