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

时间:2018-10-18 13:16:28

标签: java while-loop

这个主要的生成器类有一些问题。

此代码将再打印一个素数。 例如,当输入为25时,我得到答案

2       3       5       7       11      
13      17      19      23      29      

(我不想再加一个素数29)

我认为这是由于-> while(primeGenerator.getCurrentPrime()

但是如何确切地解决此问题?

这些是我的代码段

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 个答案:

答案 0 :(得分:1)

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

这可能会使您更接近

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

答案 1 :(得分:0)

您的检查是正确的,

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

return

然后解决方案可能处于循环状态:

findHelp(...)