如果 ArrayList 为空,如何 return NaN

How to return NaN if ArrayList is empty

我正在做一个 Java 练习,要求我 return 一列数字的平均值。如果 arrayList 为空,则 NaN 为 returned.

public class ListAverage {
    public static double findAverageDouble(ArrayList<Double> numbers) {
        if(numbers.size() != 0) {
            numbers = new ArrayList<Double>();
            
            double sum = 0.0;
            
            for(double num : numbers){
                sum += num;
            }
            
            double average = (sum / numbers.size());
            
            return average;
        } else {
            return NaN;
        }
    }
}

我很确定我的第一部分(求平均值)是正确的。但是 return NaN 怎么可能呢?感谢您的帮助!


编辑:在我 return Double.NaN 之后。 我收到此错误,其中所有测试用例 return NaN。

Java中没有NaN本身,但有常量Double.NaNFloat.NaN。 Return其中之一。

Java NaN

您还可以减少代码的嵌套

public static double findAverageDouble(ArrayList<Double> numbers) {
    if(numbers.size() == 0) {
        return Double.NaN;
    }
        
    double sum = 0.0;
        
    for(double num : numbers) {
        sum += num;
    }
        
    double average = (sum / numbers.size());
        
    return average;
}

更新: 排队

numbers = new ArrayList<Double>();

你覆盖丢失值的列表,因此非空列表的答案将始终为 0。删除此行。

流解决方案

这可能不是您想要的,也许这是为了练习。平均双数列表是内置的,或者几乎是。

public static double findAverageDouble(ArrayList<Double> numbers) {
    return numbers.stream()
            .mapToDouble(Double::doubleValue)
            .average()
            .orElse(Double.NaN);
}

DoubleStream.average() return 是一个 OptionalDouble,您可以考虑 return 直接使用它而不是 NaN。在上面的代码中,我相信你的话,并使用 orElse() 在空列表的情况下为 return 值选择 NaN。