Java For循环条件测试

Java For循环条件测试,java,for-loop,Java,For Loop,我相信这是一个非常基本的问题,但是我很难理解为什么下面的FOR循环有效 下面的代码返回了一组素数,并按其应该的方式工作。我理解使用平方根背后的全部数学推理,但是我的问题更多的是FOR语句的条件部分 输入isPrime()进行检查的第一个参数是2,当然是素数。第一个isPrime()获取2的平方根,即~1.4。 在这一点上,我感到困惑。从i=2开始,它显然大于1.4,因此i根的起始条件未初始化为sqrt(2),它被初始化为sqrt(checkNumber),对于大多数输入,它将大于2。因此,对于输

我相信这是一个非常基本的问题,但是我很难理解为什么下面的FOR循环有效

下面的代码返回了一组素数,并按其应该的方式工作。我理解使用平方根背后的全部数学推理,但是我的问题更多的是FOR语句的条件部分

输入
isPrime()
进行检查的第一个参数是2,当然是素数。第一个
isPrime()
获取2的平方根,即~1.4。

在这一点上,我感到困惑。从i=2开始,它显然大于1.4,因此i
根的起始条件未初始化为
sqrt(2)
,它被初始化为
sqrt(checkNumber)
,对于大多数输入,它将大于2。因此,对于输入1、2、3,您的
比i的起始条件低,实际上,循环根本不会执行。因此,循环体中的
returnfalse
语句也不会执行。相反,循环执行之后的
return true
语句将被执行,对于这些输入,方法调用的结果将是
true

循环将执行的第一个数字是4,该方法将正确返回
false
,因为4可以除以2

修复代码的缩进使此行为更容易看到:

public static boolean isPrime(int checkNumber) {
    double root = Math.sqrt(checkNumber); //get square root of candidate
    for (int i = 2; i <= root; i++) {  
        if (checkNumber % i == 0) { //if remainder of candidate/i = 0
            return false; //because candidate is not prime.  has factor other than 1 and self.
        }
    }
    return true;
}  
public静态布尔值isPrime(int checkNumber){
double root=Math.sqrt(checkNumber);//获取候选对象的平方根

for(int i=2;我感谢Sebastian!因此,将返回值true放在for循环之外,但仍然放在方法体中会使布尔方法“default”变为true,即使for循环从未启动。这非常有意义。谢谢!
public static boolean isPrime(int checkNumber) {
    double root = Math.sqrt(checkNumber); //get square root of candidate
    for (int i = 2; i <= root; i++) {  
        if (checkNumber % i == 0) { //if remainder of candidate/i = 0
            return false; //because candidate is not prime.  has factor other than 1 and self.
        }
    }
    return true;
}