This question already has an answer here:
What does “possible lossy conversion” mean and how do I fix it?
                                
                                    (1个答案)
                                
                        
                                2年前关闭。
            
                    
我正在创建一个程序,将双精度数存储在数组中,然后将每个数组存储在ArrayList中,然后从该ArrayList计算平均值,但是我不断收到“从双精度数到整数的可能有损转换”。在第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;
}

最佳答案

我不确定您要问的是什么,但我认为这就是您想要的。

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

07-24 09:47
查看更多