Java中的返回类型问题

Java中的返回类型问题,java,arrays,double,average,Java,Arrays,Double,Average,我目前正在写一个简单的方法来平均一个双精度数组中的所有值。以下是我所拥有的: public static double mean(double[] data){ double sum=0.0; for (double i:data) { sum+=i; double arrayLength= data.length; double avg = sum/arrayLength;

我目前正在写一个简单的方法来平均一个双精度数组中的所有值。以下是我所拥有的:

public static double mean(double[] data){
        double sum=0.0;
        for (double i:data) {
            sum+=i;
            double arrayLength= data.length;
            double avg = sum/arrayLength;
            return avg;
        }
}

它告诉我,我没有返回类型双,但我不知道如何解决这个问题。我将avg声明为double,那么为什么它会这样说呢?

试想一下,如果数据数组为空,会发生什么?那么每个循环是否执行?如果没有,会退还什么

您需要在所有可能的执行路径中都有一个return语句。在方法块的末尾添加return语句,在数据为空/null的情况下,使用您希望返回的任何值


请注意,对于double i:data,如果数据为null,则会抛出NullPointerException,这是for循环中的一个小问题。

for循环中有return语句。此外,要清理代码,您可以尝试:

return sum/(double)data.length;

正如Nambari所说,如果数组为空,则不返回任何内容。 但若数组包含两个以上的元素,那个么就不会返回第一次迭代时所返回的内容。 你应该有这样的东西:

public static double mean(double[] data){
    double sum=0.0;
    for (double i:data) {
        sum+=i;
    }

    double arrayLength= data.length;
    double avg = sum/arrayLength;
    return avg;
}
所以在前面,您在for循环的每个执行上都声明了double avg和double arraylelength。您还有一个returnavg语句,它将停止for循环运行超过1次


如果您将这三行移到for循环之外,它将很好地工作

循环中唯一需要做的事情就是增加总和。其余部分应移至方法末尾:

public static double mean(double[] data){
    double sum=0.0;
    for (double i:data) {
        sum+=i;
    }
    double arrayLength= data.length;
    double avg = sum/arrayLength;
    return avg;
}

关键是,如果数组为空,则方法中有一个执行路径不会从该方法返回任何值

我同意错误信息可以更清楚一点。实际上,这就是Eclipse错误消息,如果您使用javac手动编译该类,您将得到:error:missing return语句,这更适合这种情况

为了保持一致性,java 8中的等效一行代码是:

public static double mean1(double[] data){
    return Arrays.stream(data).average().orElse(0);
}

因此,为了简洁和可读性,如果使用java 8,我建议您这样做。

data.length也会抛出一个NPE,因此它不仅仅是一个增强的for循环issue@cricket_007:data.length不是在for循环中吗?我是说如果你做了一个常规的forint I=0;ipublic static double mean1(double[] data){ return Arrays.stream(data).average().orElse(0); }