我想显示用户所需的素数。例如,如果用户想要第3个素数,我将显示5.我有以下java代码。
import java.util.Scanner;
public class Prime {
private static Scanner scanner;
public static void main(String args[]) {
//get input till which prime number to be printed
// System.out.println("Enter which prime number to be printed: ");
// scanner = new Scanner(System.in);
// int limit = scanner.nextInt();
int count = 0;
int number = 2;
//System.out.println("Printing prime number from 1 to " + limit);
while(count<=3)
{
if(isPrime(number)){
count++;
// System.out.println(count);
}
number++;
}
if(count == 3)
System.out.println("10001 prime is "+number);
}
public static boolean isPrime(int number){
for(int i=2; i<number; i++){
if(number%i == 0){
return false;
}
}
return true;
}
}
当我运行它时,我无法获得任何输出。我哪里错了? PS:暂时,我只运行循环直到3.
答案 0 :(得分:5)
你有while(count <= 3)
所以当你退出循环时,count == 4
。
因此,您的if(count == 3)
永远不会输入,也不会打印任何内容。
答案 1 :(得分:1)
无论如何,更好的解决方案是
public void calcPrime(int inp) {
ArrayList<Integer> arr = new ArrayList<Integer>();
arr.add(2);
arr.add(3);
int counter = 4;
while(arr.size() < inp) {
if(counter % 2 != 0 && counter%3 != 0) {
int temp = 4;
while(temp*temp <= counter) {
if(counter % temp == 0)
break;
temp ++;
}
if(temp*temp > counter) {
arr.add(counter);
}
}
counter++;
}
System.out.println("finish" +arr.get(inp-1));
}
}
答案 2 :(得分:0)
以下是有效的更正代码。
public class Main {
public static void main(String args[]) {
//Returns fourth prime number
System.out.println(getPrimeNumber(4));
}
public static int getPrimeNumber(int order) {
int currentOrder = 1;
int currentNumber = 1;
while (currentOrder < order) {
currentNumber++;
if (isPrime(currentNumber)) currentOrder++;
}
return currentNumber;
}
public static boolean isPrime(int number) {
for (int i = 2; i < number; i++) {
if (number % i == 0) {
return false;
}
}
return true;
}
}
没有必要在0开始你的计数器,从数字2开始在数学上是错误的!刚开始,order和currentNumber初始化为1,如果第一个素数是你的用户正在寻找的,那么就不需要循环了!
此外,正确变量初始化后的循环条件已从“&lt; =”更正为“&lt;”。
这就是全部!