试图找到下一个素数,不确定什么是错的。 Java的

时间:2017-05-14 19:31:32

标签: java primes

我是Java的新手,只是无法弄清楚为什么我的程序无法运行。任何人都可以提供帮助的人将不胜感激!

public class LabOne {
    public static void main(String[] args) {

        System.out.println("Please input a number: \n");

        int inputReceive = 44;
        int nextPrime = inputReceive;
        int n = 5;
        boolean isprime=true;

        do {
            if(inputReceive <= 1)
                isprime = false;    
            else if(inputReceive <= 3){
                System.out.printf("%d \n",isprime);
                return;     
            }else if( inputReceive % 2 == 0 || inputReceive % 3 == 0)
                 isprime = false;
            while ((n*n)<inputReceive){
                if (inputReceive % n == 0 || inputReceive % (n + 2) == 0)
                isprime = false;

                n = n+6;
                isprime = true;
            }
            nextPrime++;
        }while(isprime = false);

        System.out.printf("Next prime number is %d",nextPrime);
    }
}

给出的输出为45,这是不正确的。

2 个答案:

答案 0 :(得分:0)

一些问题:

while(isprime = false);

这个任务,而不是平等测试。由于您正在分配false,因此不会循环。

            n = n+6;
            isprime = true;

你无条件地这样做。

继续扩张。

答案 1 :(得分:0)

忽略已经指出的内容,您在inputRecieve上执行所有检查,并且永远不会更新它。您只能无条件地更新nextPrime,而且永远不会检查其优先级。我将如何做到这一点:

public static boolean isPrime(int x){
    boolean result = true;

    for(int i = 2; i<=Math.sqrt(x); i++){
        if((x % i) == 0){
            result = false;
        }
    }

    return result;
}

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    System.out.println("Please insert a number:");
    int inputRecieve = sc.nextInt();

    boolean notPrime = true;

    while(notPrime){
        if(isPrime(++inputRecieve))
            notPrime = false;
    }

    System.out.println("Next prime number is: " + inputRecieve);

}