这个主要的生成器类有一些问题。
此代码将再打印一个素数。 例如,当输入为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;
}
}
谢谢!
答案 0 :(得分:1)
您不是在输出小于输入的当前素数,而是输出可能比输入高得多的下一个素数。
这可能会使您更接近
System.out.printf("%-8d",primeGenerator.currentPrime());
primeGenerator.nextPrime();
答案 1 :(得分:0)
您的检查是正确的,
下面的循环适用于23 <25,然后计算下一个素数为29并打印出来。
return
然后解决方案可能处于循环状态:
findHelp(...)