Почему класс PrimeGenerator генерирует еще одно число, чем то, что я хочу? - PullRequest
0 голосов
/ 18 октября 2018

У меня есть некоторые проблемы с этим классом простого генератора.

Этот код печатает еще одно простое число.например, когда ввод 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 голосов
/ 18 октября 2018

Ваша проверка верна,

Следующий цикл работает для 23 <25, а затем следующее простое число рассчитывается как 29 и печатается. </p>

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

Тогда решение может быть вусловие цикла:

while (primeGenerator.nextPrime() < input)
0 голосов
/ 18 октября 2018

Вы выводите не текущее простое число, которое меньше входного значения, а следующее простое число, которое может быть намного выше, чем ваш ввод.

Это может приблизить вас:

System.out.printf("%-8d",primeGenerator.currentPrime());
primeGenerator.nextPrime();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...