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;i
public static double mean1(double[] data){
return Arrays.stream(data).average().orElse(0);
}