对于我正在进行的计算,我制作了一个方法来计算哪个数字是两个中最低的:
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会抱怨这个?
答案 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语句涵盖one
和two
之间的所有可能关系,编译器也不知道。
答案 3 :(得分:2)
为了使编译器能够理解这一点,你必须这样做:
if (one <= two)
return one;
else
return two;
但是,我强烈建议您查看Math.min(doube x, double y)
,这正是您要重新实现的内容。