为什么我的素数java程序不打印素数? 静态空素数(int n) { System.out.println(“所有到“+n+”的素数都是-->\n”); 布尔值isPrime=true; for(int i=2;i
在这段代码中,我试图列出所有的素数,直到用户输入的“n”。我不知道如何解决这个问题,以产生n以下的所有素数为什么我的素数java程序不打印素数? 静态空素数(int n) { System.out.println(“所有到“+n+”的素数都是-->\n”); 布尔值isPrime=true; for(int i=2;i,java,Java,在这段代码中,我试图列出所有的素数,直到用户输入的“n”。我不知道如何解决这个问题,以产生n以下的所有素数 static void primeNumbers(int n) { System.out.println("All the prime numbers up to "+n+" are -->\n"); boolean isPrime = true; for(int i = 2; i < n; i++)
static void primeNumbers(int n)
{
System.out.println("All the prime numbers up to "+n+" are -->\n");
boolean isPrime = true;
for(int i = 2; i < n; i++)
{
for (int j = 1; j < i; j++)
{
if(i % j == 1)
{
isPrime = true;
System.out.print(j);
}
if(i % j == 0)
{
isPrime = false;
System.out.print(" ");
}
}
}
}
这个if语句对于任何i
都是真的,因为j
从1开始。因此,您为每个数字<n
和>=2
另外,
isPrime
可能是一个不必要的变量。我认为这是脚本中的一个逻辑问题。
您应该使用循环计算从2到n-1的所有数字,这些数字在测试中为=到0
if (i % j == 0) {
isPrime = false;
System.out.print(" ");
}
如果计数器=0,则无除法器,然后是素数您要测试
i
是否可被[2..i-1]范围内的任何数字除法,如果是,则它不是素数。您的j
-循环从1开始,这是第一个错误
知道一个数字何时可被另一个数字除法的测试如下:如果(i%j==0){
(如果除法余数为零),则在代码中测试是否等于1
第三件事是你在第一次迭代中做出决定(当j为1时),并且总是在你的内部循环中打印一些东西。你需要从内部循环中提取逻辑。只有当我不能被j
s的任何分割时,它才是素数
以下是您的代码的修改版本:
n%i = 0
静态空素数(int n){
System.out.println(“所有到“+n+”的素数都是-->\n”);
for(int i=2;i
您的算法虽然很慢,但在大多数情况下似乎都是正确的,只是您没有很好地处理边界条件。例如,2是一个素数,您只运行迭代到n-1,您没有为每个数字重置isPrime标志,还有一些小事情。这是一个修改后的工作版本。尝试比较i不要和你的人在一起,要明白你哪里做得不对
static void primeNumbers(int n) {
System.out.println("All the prime numbers up to "+n+" are -->\n");
for (int i = 2; i < n; i++) {
boolean isPrime = true;
for (int j = 2; j < i; j++) {
if(i % j != 0) {
isPrime = false;
}
}
if (isPrime) {
System.out.print(i, " ");
}
}
}
int n=10;
System.out.println(“所有到“+n+”的素数都是-->\n”);
布尔值isPrime=true;
for(int i=2;i不要在第二个for循环中将isPrime
重新设置为true,只要数字不是素数一次,我们就知道它不是永远素数。只需在外部循环的每次迭代中将其设置为true,然后在外部执行最后的“is prime”检查
int n = 10;
System.out.println("All the prime numbers up to "+n+" are -->\n");
boolean isPrime = true;
for(int i = 2; i <= n; i++)
{
for (int j = 2; j < i; j++)
{
if(i % j == 0)
{
isPrime = false;
break;
}
}
if(isPrime) {
System.out.println(i);
}
isPrime = true;
}
static void isPrime(int n)
{
System.out.println(“所有到“+n+”的素数都是-->\n”);
对于(int i=2;i)是时候使用调试器了。我建议您找到得到错误答案的最小数字,并在头脑中(或在纸上)逐步完成代码找出哪里出错。它打印出什么?它打印出的只是空格吗?它打印出的是所有的数字吗?它打印出的是完全错误的输出吗?它只是打印出数字2,3,2,4,5,2,3.6,7。我否决了这个问题,因为没有证据表明对这个代码进行了任何调试。请回答演示您的调试发现了什么,以及关于特定代码行的特定问题。请参阅:和。
static void isPrime(int n)
{
System.out.println("All the prime numbers up to "+n+" are -->\n");
for(int i = 2; i <= n; i++)
{
boolean isPrime = true;
for (int j = 2; j < i; j++)
{
if(i % j == 0)
{
isPrime = false;
System.out.println(i + " is not prime because " + i + " is divisible by " + j );
break;
}
}
if (isPrime){
System.out.println(i + " is prime.");
}
}
}