gpt4 book ai didi

java - 我无法找出 PrimeGenerator 中的错误

转载 作者:行者123 更新时间:2023-12-02 06:11:31 26 4
gpt4 key购买 nike

在输出中,我得到了 9,而我应该得到 11!

这发生在第五次调用nextPrime()之后。除第 5 个输出外,其他所有输出都是正确的!几个小时以来我一直在努力确定我的错误。抱歉,如果我的代码很草率,这就是我的想法解决问题的方式!要求使用标志控制循环。

public class PrimeGenerator
{
private int num = 2;

public PrimeGenerator()
{
}
public int nextPrime()
{
boolean done = false;

for (int n = num; !isPrime(num); n++)
num = n;

if (isPrime(num))
{
done = true;
}

if (done)
{
int prime = num;
num++;
return prime;
}
return num;
}

public static boolean isPrime(int n)
{
boolean result = true;
for (int i = 2; n % i == 0 && i < n; i++)
result = false;
if (n == 2)
result = true;
return result;
}
}

我的测试器仅调用 nextPrime() 方法并打印结果。

最佳答案

您得到 9 而不是 11,因为您在方法 isPrime 中出现错误

public static boolean isPrime(int n)
{
boolean result = true;
for (int i = 2; n % i == 0 && i < n; i++)
result = false;
if (n == 2)
result = true;
return result;
}

寻找数字9。第一次迭代:i = 2,结果 = true

n % i => 9 % 2 = 1,因此循环在第一次迭代之前停止,并且结果没有改变。

尝试更改方法isPrime(更新为评论中@John的评论)

public static boolean isPrime(int n)
{
if( n % 2 == 0 ) {
return false;
}
double root = Math.sqrt(n);
for ( int i = 3; i < root; i+=2 ) {
if( n % i == 0 ) {
return false;
}
}
return true;
}

关于java - 我无法找出 PrimeGenerator 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21836891/

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