我总是假设如果声明声明为false,例如boolean valid = false
,那么写!valid
将反过来valid
为真。然而,这是一个完全错误的错误观念吗?例如,在下面的代码中;
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
是否为false?
因为如果暗示除数是假的,那么它不会只是说:
div<=Math.sqrt(check) && divisorFound;
答案 0 :(得分:5)
我假设您没有编写此代码并试图了解其目的是什么。内循环应该继续,直到找到除数。因此,它会反复检查!divisorFound
是否评估为true
。换句话说,&#34;有一个除数而不是呢?&#34;。
找到除数后,divisorFound
设置为true
,表达式!divisorFound
的计算结果为false
,因此循环将停止。
如果使用了您建议的条件检查:
div<=Math.sqrt(check) && divisorFound
永远不会到达循环体。 divisorFound
开始为false
,因此继续条件会立即失败,循环将终止。
答案 1 :(得分:1)
当div
小于Math.sqrt(check)
并且未找到除数时,第二个循环是继续循环。当divisorFound
设置为true时,内部循环将失败其条件。
我认为你必须误读代码,因为这是一个非常直接的布尔条件。