找到可变数量的双精度内的平均值

时间:2012-05-09 12:39:10

标签: java arraylist double average

我有一个双打的ArrayList,我需要找到所有数字之间的平均值。 arraylist中Double实例的数量不是常数,可以是2,可以是90 我一直在努力争取自己的算法,但无论如何都无法让它工作。

你有什么建议吗?或者您可以将我链接到现有的图书馆以获得此平均值?

谢谢

7 个答案:

答案 0 :(得分:5)

创建sum变量:

double sum = 0;

使用for循环遍历列表中的元素:

for (double d : yourList)

在每次迭代中,将sum添加到当前值:

    sum += d;

在循环之后,为了找到平均值,将sum与列表中的元素数除以:

double avg = sum / yourList.size();

对于认为这太简单的每个人来说,这是 ......

上述解决方案实际上并不完美。如果列表中的前几个元素非常大且最后一个元素很小,则由于双精度的精确度,sum += d可能不会对结尾产生影响。

解决方案是在进行平均计算之前对列表进行排序:

Collections.sort(doublesList);

现在首先添加小元素,这样可以确保它们尽可能准确地计算并为最终总和做出贡献: - )

答案 1 :(得分:2)

如果你喜欢溪流:

List<Number> list = Arrays.asList(number1, number2, number3, number4);

// calculate the average
double average = list.stream()
                     .mapToDouble(Number::doubleValue)
                     .average()
                     .getAsDouble();

答案 2 :(得分:0)

平均值的定义是所有值的总和除以值的数量。循环遍历值,添加它们,并将总和除以列表的大小。

答案 3 :(得分:0)

如果通过“所有数字之间的平均值”表示列表中所有双打的平均值,则只需添加列表中的所有双打(带循环)并将该总数除以列表中的双精度数

答案 4 :(得分:0)

你试过了吗?

List<Double> list = new ArrayList<Double>();
...    
double countTotal = 0;

for (Double number : list)
{
    countTotal += number;
}

double average = countTotal / list.size();

答案 5 :(得分:0)

也许我没有问题......但是这不是这样的吗?

double sum = 0.0;
for (double element : list) {
    sum += element;
}
double average = sum / list.size();

答案 6 :(得分:0)

如果您在将整个列表汇总在一起时担心溢出,则可以使用移动平均值。因为它有更多的操作,所以比将所有内容添加到一起并分割一次要慢。

for (int x = 0; x < list.size(); x++)
   average = (average / (x+1)) * (x) + list.get(x) / (x+1);