为什么这段代码错了?当我"else if(this.power >= p)"
只改变时"else"
,它是正确的.任何人都可以给我一个提示吗?
public boolean useBattery(double p) {
if(this.power < p) {
this.power = 0.0;
return false;
} else if(this.power >= p) {
this.power = this.power - p;
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
对于查看代码的人类读者来说,似乎第一个return
将被命中,或者第二个,但编译器无法确定.对于编译器,它看起来像:
if (condition1) {
...
return false;
} else if (condition2) {
...
return true;
}
Run Code Online (Sandbox Code Playgroud)
并且它需要知道,如果既不是condition1
也不condition2
是真的那么该方法会返回什么?
如果你改成直线else
,
if (condition1) {
...
return false;
} else {
...
return true;
}
Run Code Online (Sandbox Code Playgroud)
那么肯定return
必须击中两个陈述中的一个.
实际上在你的方法中,有可能不会满足任何条件:如果你要比较的数字之一是NaN
(表示"不是数字"的特殊浮点值),那么你的两个if
条件都将是假的,并且方法没有返回值.
从理论上讲,在另一个线程中运行的某些代码可能会改变this.power
第一个if
检查和第二个检查之间的值,这可能导致两个条件评估为false.因此,编译器无法确定是否满足其中一个条件,即使它们在逻辑上是互补的.