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



对于我正在进行的计算,我制定了一种方法来计算两个数字中最低的一个:

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"。

我对此感到困惑,因为方法必须返回doubles!一个数字可以大于、小于或等于另一个数字。因此,当返回双精度时,没有任何实例。

Eclipse为什么抱怨这件事?

除了已经给出的答案之外,如果其中一个doubles未定义(Double.NaN),则所有这些检查都可能失败。这是因为涉及NaN值的比较总是返回false,而与涉及的其他值无关。

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

public static void main(String[] args) {
    double one = 1;
    double two = Double.NaN;
    System.out.println(min(one, two));
}
static String min(double one, double two) {
    if (one < two) return "one";
    if (one > two) return "two";
    if (one == two) return "two";
    return "defaulted";
}

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

假设您正在调试程序,当调用该方法时,one大于two。然后第一个if条件不满足,并且执行进入下一个条件,该条件应当为真。但是,如果在断点暂停执行时,您使用调试器将one的值更改为小于two,则第二个if条件也将不满足。最终,这种情况导致不满足任何条件。

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

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

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

即使if语句涵盖了onetwo之间的所有可能关系,编译器也不知道这一点。

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

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

然而,我敦促您看看Math.min(doube x, double y),它正是您试图重新实现的。

最新更新