Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的素数java程序不打印素数? 静态空素数(int n) { System.out.println(“所有到“+n+”的素数都是-->\n”); 布尔值isPrime=true; for(int i=2;i_Java - Fatal编程技术网

为什么我的素数java程序不打印素数? 静态空素数(int n) { System.out.println(“所有到“+n+”的素数都是-->\n”); 布尔值isPrime=true; for(int i=2;i

为什么我的素数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++)

在这段代码中,我试图列出所有的素数,直到用户输入的“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++)
        {
            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.");
            }
        }

    }