Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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 素数程序不起作用_Java_Primes - Fatal编程技术网

Java 素数程序不起作用

Java 素数程序不起作用,java,primes,Java,Primes,我试图用Java编写一个简单的程序,输出所有的素数,从数字2跳到数字n。它不起作用,我也没有主意了。如果有人能看看我的代码,告诉我问题出在哪里,我将不胜感激 public class PrimeNum { public static void main(String[] args) { int n = 50; int notAPrime = 0; System.out.println("All prime numbers before

我试图用Java编写一个简单的程序,输出所有的素数,从数字2跳到数字n。它不起作用,我也没有主意了。如果有人能看看我的代码,告诉我问题出在哪里,我将不胜感激

public class PrimeNum {

    public static void main(String[] args) {
        int n = 50;
        int notAPrime = 0;

        System.out.println("All prime numbers before number " +n+ " are : ");
        for(int i = n; i > 2; i--){
            for(int j = 2; j < i; j++){
                if(i % j == 0){
                  notAPrime++;
                }
            }
            if(notAPrime == 0){
                System.out.println(i);
                notAPrime = 0;  
            }       
        }
    }
}

您的for循环缺少一个中断

public class primeNum {

    public static void main(String[] args) {
        int n=50;
        int notAPrime=0;

        System.out.println("All prime numbers before number " +n+ " are : ");
        for(int i=n; i>2; i--){
           for(int j=2; j<i; j++){
               if(i%j==0){
                  notAPrime++;
                  break; //your program is missing this statement
               }
            } 
            if(notAPrime==0){
               System.out.print(i + " ");                   
            }   
            notAPrime=0;     //In your program it is inside the if statement which makes it incorrect.
        }
    }
}
输出: 数字50之前的所有素数都是: 47 43 41 37 31 29 23 19 13 11 7 5 3

通过进行以下更改,可以提高程序的效率:

public class primeNum {

    public static void main(String[] args) {
        int n=50;
        int notAPrime=0;

        System.out.println("All prime numbers before number " +n+ " are : ");
        for(int i=n; i>2; i--){
           if(i%2==0){
               continue;
           }
           for(int j=3; j<i; j+=2){  
               if(i%j==0){
                  notAPrime++;
                  break;
               }
            } 
            if(notAPrime==0){
               System.out.print(i + " ");                   
            }   
            notAPrime=0;     
        }
    }
}
只需在forint i=n中声明notAPrime;i>2;i-使每个i-候选人成为主要候选人的地方性。 现在,您可以增加notAPrime,并且永远不会将其重置为零。

试试这个

public class primeNum {

public static void main(String[] args) {
    int n = 50;
    boolean prime;

    System.out.println("All prime numbers before number " +n+ " are : ");
    for(int i = n; i > 2; i--){
        prime = true;
        for(int j = 2; j < i; j++){
            if(i % j == 0){
              prime = false;
            }
        }
        if(prime){
            System.out.println(i);
        }
    }
}
}

注意,我将notAPrime变量从int改为boolean,并改为一个名称,告诉您它的含义。如果只增加notAPrime整数,则永远不会得到任何期望的结果。 顺便说一句,这是一个热修复程序,您得到了更正后的第一种代码形式。请记住,2也是一个素数,您的代码忽略了这一点。
只需要再努力一点

实际输出是什么?印刷错误:只需移动notAPrime=0;在if之后,不在it中。否则,您将继续递增,而不对每个数字将其设置为0。在这种特定情况下没有输出。如果我把notAPrime=0放在If循环之外,它也不会工作。它输出3,4,5,5,5,6,6,7,7,7,8,8,8,8,9…这是一个熟悉调试器使用的好机会。有了它,您可以在代码执行时逐行遍历代码,并观察运行时值和行为。这将帮助您确定问题发生的位置。我使用记事本,而不是JDK。为什么我会被否决?这个程序给出了正确的结果。