gpt4 book ai didi

Java For 循环条件测试

转载 作者:行者123 更新时间:2023-11-30 08:08:58 24 4
gpt4 key购买 nike

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

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

输入 isPrime() 以检查的第一个参数是 2,这当然是质数。第一个 isPrime() 得到 2 的平方根,即 ~ 1.4。
在这一点上,我感到困惑。从 i = 2 开始,这显然 > 1.4,因此没有满足 i <= root 的起始条件(即 2 <= 1.4)。 IF 语句不应运行并且它应该 不返回任何结果,但它确实返回了。

在我看来,在我得到 5 之前我不应该得到任何结果,因为 2 也大于 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;
}
}

最佳答案

确实,对于输入 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;
}

关于Java For 循环条件测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32800719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com