我有一个双打的ArrayList,我需要找到所有数字之间的平均值。 arraylist中Double实例的数量不是常数,可以是2,可以是90 我一直在努力争取自己的算法,但无论如何都无法让它工作。
你有什么建议吗?或者您可以将我链接到现有的图书馆以获得此平均值?谢谢
答案 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);