Java 为什么eclipse错误地说我的方法必须返回一个double?

Java 为什么eclipse错误地说我的方法必须返回一个double?,java,eclipse,Java,Eclipse,对于我正在进行的计算,我提出了一种方法,计算两个数字中哪一个是最低的: public static double min(double one, double two){ if (one < two) return one; //Return one if it is less than two if (two < one) return two; //Return two if it is less than one if (one == two) retu

对于我正在进行的计算,我提出了一种方法,计算两个数字中哪一个是最低的:

public static double min(double one, double two){
    if (one < two) return one; //Return one if it is less than two
    if (two < one) return two; //Return two if it is less than one
    if (one == two) return two; //Return two, because it's the same.
}
然而,Eclipse告诉我,这个方法必须返回double类型

我对此感到困惑,因为该方法必须返回双倍!一个数字可以大于、小于或等于另一个数字。因此,没有不返回double的实例


为什么Eclipse会抱怨这个问题?

在任何执行路径中都必须有一个return语句:

public static double min(double one, double two){
    if (one < two) 
        return one; 
    else if (two < one) 
        return two;
    else 
        return two; 
}

即使if语句涵盖了1和2之间所有可能的关系,编译器也不知道。

编译器检测到,如果三个if条件都不满足,那么该方法将不会返回任何值。在这种情况下,这在逻辑上可能没有意义,因为这三个条件中的任何一个都必须满足,但编译器并不真正关心这一点

假设您正在调试程序,当调用该方法时,一大于二。然后,如果不满足第一个条件,则执行转到下一个应为true的条件。但是,如果在断点挂起执行时,使用调试器将1的值更改为小于2,则第二个if条件也将不满足。最终,这种情况导致不满足任何条件


当在末尾添加return语句时,无论执行过程中发生什么情况,该方法都保证返回一个值。

要让编译器理解这一点,您必须这样做:

if (one <= two)
    return one;
else
    return two;

然而,我强烈建议你看看Math.mindoube x,double y,它正是你想要重新实现的。作为对已经给出的答案的补充,如果其中一个double是未定义的double.NaN,那么所有这些检查都可能失败。 这是因为涉及NaN值的比较总是返回false,而与涉及的其他值无关

因此,编译器说该方法需要有一个默认返回值是正确的。这可以通过此测试用例显示,它将打印默认值:

公共静态无效字符串[]args{ 双1=1; double-two=double.NaN; System.out.printlnminone,2; } 静态字符串mindouble 1,double 2{ 如果一小于二,返回一; 如果一>二返回二; 如果1==2,则返回2; 返回默认值; }
当这三种情况都不满足时会发生什么?@peeskillet怎么可能都不满足?一个数字可以小于或大于或等于一个数字!编译器不够聪明,无法理解您的程序逻辑,请注意带双精度的==。也是你的朋友。编译器是愚蠢的@皮斯基莱特说得对。编译器只查看某个条件是否返回某个内容。它故意看不到逻辑。另外,如果其中一个值是NaN,程序将不会返回值。好吧,但为什么它需要一个else?无论如何,我的方法都会返回一个双精度值,那么eclipse为什么会抱怨呢?@Joehot200请看我最后一行added@Joehot200你可以把其他的都省略掉。另外这里只是为了澄清一个关于风格偏好的问题。但是为什么编译器强迫我这么做呢?难道不是程序员在做这些决定吗?@Joehot200我添加了一个例子。它们都不是NaN,但我也明白编译器不能深入研究代码。谢谢你的额外回答。