-1

我想显示用户所需的素数。例如,如果用户想要第三个素数,我将显示 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。

4

3 回答 3

5

while(count <= 3)当你退出循环时,你就有了count == 4

因此,您if(count == 3)永远不会输入,也不会打印任何内容。

于 2013-07-03T06:56:12.237 回答
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));
}
}
于 2013-07-03T06:52:55.277 回答
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 开始在数学上是错误的!只需从初始化为 1 的 order 和 currentNumber 开始,如果您的用户正在寻找第一个素数,则不需要循环!

此外,正确变量初始化后的循环条件已从“<=”更正为“<”。

就这样 !

于 2013-07-03T07:07:05.407 回答