如何在不使用java中的单独函数的情况下在两个用户输入数字之间查找素数

时间:2015-03-05 03:37:44

标签: java

我一直试图在程序中找到错误大约30分钟,这让我很烦。如果您将第一个数字输入为2而第二个数字输入为9,则输出为:3 4 5 6 7 8.它只显示两者之间的数字而不是两者之间的素数。这是代码:(请帮助)

public class PrimeNumber {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    int num1, num2, counter;
    boolean prime = true;
    Scanner input = new Scanner(System.in);

    System.out.print("Enter an integer: ");
    num1 = input.nextInt();
    System.out.print("Enter an integer greater than the previous: ");
    num2 = input.nextInt();
    input.close();

    for (int k = num1; k <= num2; k++){
       prime = true;

       for (int j = num2; j <= k; j++){
           if (k % j == 0){
               prime = false;  
           }
       }
       if (prime == true){
           System.out.println(k);
       }
    }
  }
}

2 个答案:

答案 0 :(得分:0)

内部循环从不执行if内部,除非j == k == num2

答案 1 :(得分:0)

正如@Scott Hunter和其他人指出的那样:

  

for循环中存在逻辑错误,用于检查给定数字的素数。

我建议你将素性测试分成不同的函数,这真的可以帮助你进行调试。我已在下面实施了原始素数测试供您参考:

public class PrimeNumber {

    public static void main(String[] args) {

        ....

        for (int k = num1; k <= num2; k++) {
            if (isPrime(k)) {
                System.out.println(k);
            }
        }
    }

    private static boolean isPrime(int k) {
        if (k < 2) {
            return false;
        } else {
            for (int i = 2; i < k; i++) {
                if (k % i == 0) {
                    return false;
                }
            }
        }
        return true;
    }
}

<强>更新

如果你坚持要在main方法中包含所有内容(这绝对不是一个好习惯!),修改应该非常直接:

public class PrimeNumber {

    public static void main(String[] args) {

        ....

        for (int k = num1; k <= num2; k++) {
            boolean isPrime = true;

            if (k < 2) {
                isPrime = false;
            } else {
                for (int i = 2; i < k; i++) {
                    if (k % i == 0) {
                        isPrime = false;
                    }
                }
            }

            if (isPrime) {
                System.out.println(k);
            }
        }
    }

}