【问题标题】:Find a prime number with loops用循环查找素数
【发布时间】:2015-02-11 00:25:02
【问题描述】:

我是 Java 新手,我的作业是编写一个程序,让用户输入一个数字,然后程序检查该数字是否为质数。

我必须使用任何循环和 JOptionPane 进行输入。

我已经设法编写了这段代码并且它可以工作:

import static javax.swing.JOptionPane.*;
public class Programmeringsoppgave5 {

    public static void main(String[] args) {
        int number = 0; 
        String readNumber = showInputDialog("Write a number and exit with ESC");

        while (readNumber != null){
        number = Integer.parseInt(readNumber);
            if (number != 0 && (number == 1 || number == 2)){
                System.out.println("Number " + readNumber + " is a prime number.");
            } else if (number % 2 == 0){
                System.out.println("Number " + readNumber + " is not a prime number.");
            } else if (number % 2 == 1){
                System.out.println("Number " + readNumber + " is a prime number.");
            }//end if-test
            readNumber = showInputDialog("Write a number and exit with ESC");
        }//end while    
    } //end method
}//end class

我想知道是否有更简单或更好的方法来编写这个程序?

【问题讨论】:

  • if (number % 2 == 1){ System.out.println("Number " + readNumber + " is a prime number.");} 抱歉,这不是质数的定义。 9%2 == 1 但 9 不是素数。
  • 在 0、1 和 2 之后,这基本上只是检查一个数字是偶数还是奇数。
  • 啊,我现在明白了。我总是可以做许多嵌套的 if 并检查每个素数,但这可能是非常糟糕的编程。

标签: java loops primes joptionpane


【解决方案1】:

要确保一个数是素数,您需要查看它是否可以被它下面的任何素数整除。

所以你可以做一些更像是拥有一个迄今为止发现的素数的 ArrayList,它以硬编码的 2 开头。

然后,您从 3 开始循环,并测试每个新数字是否可以被 ArrayList 中已有的任何素数整除。如果不是,则添加它并继续下一个。如果是,那你就往前走吧。

你这样做,直到你得到有问题的号码。

您可以执行一些优化。例如,当检查作为当前数字的因数的数字时,您只需向上到 sqrt(currNum)。

如果你想变得花哨,你可以实现埃拉托色尼筛法:http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

【讨论】:

  • 谢谢!以后我学数组的时候也会看看这个。
  • 好吧,如果你愿意,有一种不用数组的方法:对于给定的数字,比如 x,从 2 循环到 sqrt(x) 并检查这些数字中的任何一个是否可以相除X。如果他们都不能,那么它是主要的。我在回答中给出的解决方案比实际需要的要复杂一些。
猜你喜欢
  • 2011-01-31
  • 2016-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-24
  • 2023-03-19
  • 1970-01-01
相关资源
最近更新 更多