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