Java For Loop条件测试

时间:2015-09-26 18:43:52

标签: java for-loop

我确定这是一个非常基本的问题,但无法理解为什么下面的FOR循环有效?

下面的代码带回了一定数量的Primes,并按原样运行。我理解使用平方根背后的整个数学推理,但我的问题更多的是FOR语句的条件部分。

输入isPrime()进行检查的第一个参数是2当然是Prime。第一个isPrime()得到2的平方根,即〜1.4 此时,我感到困惑。从i = 2开始,这显然是>因此,未满足i <= root(即2 <= 1.4)的起始条件。 IF语句不应该运行, 应该不返回结果,但确实如此。

在我看来,在我到达5之前我不应该得到任何结果,因为2也是&gt;而不是3的平方根。我明显没有低估FOR语句的初始化或条件方面吗?有人可以帮我逻辑一下吗?

class BooleanTest{
    public static void main(String[] arguments) {
            int quantity = 10;
            int numPrimes = 0;                
            int candidate = 2;  //starting prime #
            System.out.println("First " + quantity + " primes:");
            while (numPrimes < quantity) {
                if (isPrime(candidate)) {   //if isPrime Method true
                    System.out.println(candidate);
                    numPrimes++;
                }
                candidate++;                
            }
    }      

    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;
   }  
}

2 个答案:

答案 0 :(得分:3)

对于输入1,2,3,实际上环路根本不会执行。因此,循环体中的return false语句也不会被执行。相反,循环之后的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;
}  

答案 1 :(得分:0)

root未初始化为sqrt(2),它已初始化为sqrt(checkNumber),对于大多数输入,该值大于2。因此,您的So than the starting condition of i <= root (ie 2 <= 1.4) has NOT been met so then the IF statement should not run and I would get no result back假设是错误的。