我一直认为,如果声明为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


循环体将永远无法到达。 divisorFoundfalse开头,因此继续条件将立即失败并且循环将终止。

关于java - 在假 boolean 值上使用not语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27558066/

10-10 22:47