我一直认为,如果声明为false,例如boolean valid = false
,那么编写!valid
会反过来将valid
设为true。但是,这是完全错误的误解吗?例如,在下面的代码中;
for (int check=3; check <= primeLimit; check += 2) {
boolean divisorFound=false;
for (int div=3; div<=Math.sqrt(check) && !divisorFound; div += 2) {
if (check%div==0)
divisorFound=true;
}
是第二个for循环搜索
divisorFound
为true还是false?因为如果这暗示除数为假,那不是就说:
div<=Math.sqrt(check) && divisorFound;
最佳答案
我假设您没有编写此代码,而是试图了解其目的。内部循环应继续直到找到除数。因此,它反复检查!divisorFound
是否评估为true
。换句话说,“还没有找到除数吗?”。
找到除数后,将divisorFound
设置为true
,表达式!divisorFound
的计算结果为false
,因此循环将停止。
如果使用了您建议的条件检查:
div<=Math.sqrt(check) && divisorFound
循环体将永远无法到达。
divisorFound
以false
开头,因此继续条件将立即失败并且循环将终止。关于java - 在假 boolean 值上使用not语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27558066/