【问题标题】:Trying to find the next prime number, not sure whats wrong. Java试图找到下一个素数,不知道出了什么问题。爪哇
【发布时间】:2017-05-14 19:31:32
【问题描述】:

我对 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,这是不正确的。

【问题讨论】:

  • 不能说这个程序,但这个条件似乎不正确。 while(isprime = false);
  • 您有很多关于 do...while 循环中的 inputReceive 的问题。这些问题的答案在循环的第一次迭代后不会改变,因为 inputReceive 没有改变。摆脱这个问题将简化你的代码,让你更容易看到什么是不工作的。
  • 添加到@Shashwat 评论,通常你会做while(!isprime) 但如果你不习惯它然后像这样反转while( false == isprime) 的条件,这样如果你错误地尝试分配一个对它的价值,它不应该编译。
  • 欢迎来到 Stack Overflow!看来您需要学习使用调试器。请帮助自己一些complementary debugging techniques。如果您之后仍有问题,请随时返回 Minimal, Complete and Verifiable Example 来证明您的问题。

标签: java primes


【解决方案1】:

几个问题:

while(isprime = false);

这是赋值,而不是相等测试。由于您分配的是false,因此不会循环。

            n = n+6;
            isprime = true;

你无条件这样做。

后续扩展。

【讨论】:

  • !isPrime 是你想要的。
【解决方案2】:

忽略已经指出的事情,您对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);

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多