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

时间:2015-03-29 11:24:40

标签: 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) return two; //Return two, because it's the same.
}

然而,Eclipse告诉我,我&#34;此方法必须返回double&#34;类型。

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

为什么Eclipse会抱怨这个?

4 个答案:

答案 0 :(得分:6)

作为对已经给出的答案的补充,如果其中一个双精度未定义(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";
}

答案 1 :(得分:3)

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

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

当最后添加return语句时,无论在执行期间发生什么情况,该方法都保证返回一个值。

答案 2 :(得分:2)

任何执行路径中都必须有一个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之间的所有可能关系,编译器也不知道。

答案 3 :(得分:2)

为了使编译器能够理解这一点,你必须这样做:

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

但是,我强烈建议您查看Math.min(doube x, double y),这正是您要重新实现的内容。