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

Java 为什么PrimeGenerator类生成的数字比我想要的多一个?,java,while-loop,Java,While Loop,我对这个基本生成器类有一些问题 此代码正在打印一个或多个素数。 例如,当输入为25时,我得到答案 2 3 5 7 11 13 17 19 23 29 有一个我不想要的额外的质数29 我认为这是由于主类中的->whileprimeGenerator.getCurrentPrime

我对这个基本生成器类有一些问题

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

2       3       5       7       11      
13      17      19      23      29      
有一个我不想要的额外的质数29

我认为这是由于主类中的->whileprimeGenerator.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;
}
}


提前谢谢

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

这可能会让你更接近:

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

你的检查是正确的

以下循环工作23<25,然后下一个素数计算为29并打印

  while (primeGenerator.primeGenerator.nextPrime() < input) // It does not limit 23
然后解决方案可能处于循环状态:

while (primeGenerator.nextPrime() < input)

当currentPrime