为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 PrimeGenerator 类生成的数字比我想要的多一个?

为什么 PrimeGenerator 类生成的数字比我想要的多一个?

吃鸡游戏 2021-11-24 19:02:55
我对这个主要生成器类有一些问题。这段代码又打印了一个素数。例如,当输入为 25 时,我得到了答案2       3       5       7       11      13      17      19      23      29      (还有一个我不想要的额外素数 29)我认为这是由于主类中的 --> while(primeGenerator.getCurrentPrime() < input) 。但是如何确切地解决这个问题?这些是我的代码片段public class PrimeGeneratorTest {public static void main(String[] args){    Scanner in = new Scanner(System.in);    // ask for the input from the user    System.out.print("Enter the input: ");    int input = in.nextInt();    // create a prime generator object    PrimeGenerator primeGenerator = new PrimeGenerator(input);    // create a counter for the number of columns in a line    int n = 0;    // Check if the current prime number is less than the upper limit    while (primeGenerator.getCurrentPrime() < input){        System.out.printf("%-8d",primeGenerator.nextPrime());        n++;        //start a new line for each 5 columns        if (n % 5 == 0){            System.out.println();        }    }}}这是 PrimeGenerator 类public class PrimeGenerator {private int upperLimit;private int prime;/** * Constructs a prime generator object * @param upperLimit the upper limit of the prime numbers */public PrimeGenerator(int upperLimit){    this.upperLimit = upperLimit;    prime = 2;}/** * Checks if the current iterating number is prime or not * @return true if prime *         false if not prime */public boolean isPrime(){    boolean isPrime = true;    for (int i = 2; i < prime ; i++){        if (prime % i == 0){            isPrime = false;        }    }    return isPrime;}/** * Returns the next prime number * @return the next prime number */public int nextPrime(){    int currentPrime = 2;    while(!isPrime()){        prime ++;    }    currentPrime = prime;    prime ++;    return currentPrime;}//nextPrime/** * Returns the current iterating prime number * @return current iterating prime number */public int getCurrentPrime() {    return prime;}}提前致谢!
查看完整描述

2 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

您不是在输出小于输入的当前素数,而是输出可能远高于您输入的下一个素数。


这可能会让你更接近:


System.out.printf("%-8d",primeGenerator.currentPrime());

primeGenerator.nextPrime();


查看完整回答
反对 回复 2021-11-24
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

你的检查是正确的,

以下循环适用于 23 < 25,然后下一个素数计算为 29 并打印出来。

  while (primeGenerator.primeGenerator.nextPrime() < input) // It does not limit 23

那么解决方案可能处于循环条件:

while (primeGenerator.nextPrime() < input)


查看完整回答
反对 回复 2021-11-24
  • 2 回答
  • 0 关注
  • 153 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信