首页 > 解决方案 > 从 ArrayList 获取双打的平均值

问题描述

我正在创建一个程序,该程序将双精度数存储在一个数组中,然后将每个数组存储在一个 ArrayList 中,然后计算该 ArrayList 的平均值,但我不断得到“从 double 到 int 的可能有损转换”。在第 5 行。

我是 java 新手,所以我可能正在监督一个简单的修复。

public static double calculateAll(List<double[]> allNumbers) {  
    double average = 0.0;
    double total = 0.0;
    for(int i = 0; i < allNumbers.size(); i++) {
        total += allNumbers.get(i);
    }
    average = total/allNumbers.size();
        return average;
}

标签: javaarraysarraylist

解决方案


我不确定您在问题中要问什么,但我认为这就是您要寻找的。

public static double calculateAll(List<Double> allNumbers) {
    double average;
    double total = 0.0;
    for (Double allNumber : allNumbers) {
        total += allNumber;
    }
    average = total / allNumbers.size();
    return average;
}

您将数组存储在集合中。所以我改变了这一点,Double注意它double是原生的,而Double不是原生的。你不能double在一个集合中。然后我将for循环转换为foreach循环

这是调用此代码的方法。

public static void main(String[] args) {
    List<Double> doubles = new ArrayList<>();
    doubles.add(0.1);
    doubles.add(4.1);
    double wat = calculateAll(doubles);
    System.out.println(wat);
}

因此,让我们记下我们所做的所有更改。

List<double[]>已替换为List<Double>

List现在拥有实例项目Double

for(int i = 0; i < allNumbers.size(); i++)改为for (Double allNumber : allNumbers)这只是一个基本的 for-each 循环。

老实说,我会为此使用 java 8,我们可以在 1 行中做到这一点!

public static double calculateAll(List<Double> allNumbers) {
    return allNumbers.stream().mapToDouble(e -> e / allNumbers.size()).sum();
}

推荐阅读