我在我的Java程序中有一个布尔方法,我想知道为什么Netbeans建议将此更改为我的代码:
return isPrime != 0;
我写的是:
if (isPrime == 0) {
return false;
}
else{
return true;
}
两者都可以正常工作,但我无法理解Netbeans更改背后的逻辑。既不是对还是错。有人可以向我解释这背后的逻辑吗?谢谢
netbeans是完全正确的。表达式是布尔值。您可以通过进行更改并尝试一下轻松证明它。
0 != 0
评估什么值?(提示:是false
)。1 != 0
呢?(提示:是true
)。
这不是您更详细的代码所说的?
而不是
if (isPrime == 0) {
return false;
} else {
return true;
}
尝试
return (isPrime != 0);
是同一回事,我将向您展示重构路径。从
开始if (isPrime == 0) {
return false;
} else {
return true;
}
与
相同if (isPrime != 0) {
return true;
} else {
return false;
}
可以通过替换来降低,用函数'doisprime()'iSprime!= 0''
private boolean doIsPrime() {
return isPrime != 0;
}
代替
if (doIsPrime()) {
// guaranteed to be the same as above!
return doIsPrime();
} else {
return doIsPrime();
}
可以减少两个块(作为重复的代码)
if (doIsPrime()) {
}
return doIsPrime();
并通过删除空块周围的if语句
来进一步减少return doIsPrime();
现在取消替换'doisprime()'回到'isprime!= 0'
return isPrime != 0;
无需真正替代。但是,我发现它更好地展示了if语句是多余的原因。
尚未返回对还是错。
false。比较isPrime != 0
的结果,返回boolean
,true
或false
。
有人可以向我解释这背后的逻辑吗?
第一个代码等效于第二代码。如果isPrime
是0
,则返回false
,否则返回true
。如果isPrime
为0
,则!=
操作员将产生false
,而true
如果不是0
。
它意味着它返回Predicat isPrime != 0
的结果如果isprime = 0,则序言为false,因此返回false如果是isprime!= 0,则predicat是正确的,因此返回true
它只是为了减少代码。
表达式isPrime != 0
返回布尔值。如果isPrime == 0
且如果isPrime != 0
为true,则是错误的。因此,您可以保存IF语句和一些代码行。
只是为了添加已经说的话:
尽管您的解决方案和NetBeans建议的方法是完全正确的,但另一种方法也是:
if (isPrime == 0) {
return false;
}
return true;
我不知道Netbeans通过这种方法会暗示什么,但我想它会提出与上面相同的建议。