在Java中检查素数作为用户输入

时间:2019-03-04 22:18:54

标签: java

我正在尝试检查用户输入的是否是质数。下面的代码是我的。这里怎么了?

public static void main(String args[]) {

    int a;
    Scanner sc = new Scanner(System.in);

    System.out.println("Enter number to check : ");

    //sc.close();

    for (a = sc.nextInt(); a > 2;) {

        boolean isPrime = true;

        for (int b = 2; b < a; b++) {

            if (a % b == 0) {
                isPrime = false;
                //System.out.println(a + " is not a prime number");
                break;
            }

            if(isPrime) {
                System.out.println(a + " is a prime number");
            }
        }
    }
}

}

2 个答案:

答案 0 :(得分:2)

将打印语句移到内循环之外。

public static void main(String args[]) {

    int a;
    Scanner sc = new Scanner(System.in);

    System.out.println("Enter number to check : ");

    //sc.close();

    for (a = sc.nextInt(); a > 2;) {
        boolean isPrime = true;

        for (int b = 2; b < a; b++) {
            if (a % b == 0) {
                isPrime = false;
                break;
            }
        }
        if(isPrime) {
            System.out.println(a + " is a prime number");
        } else {
            System.out.println(a + " is not a prime number");
        }
    }
}

答案 1 :(得分:0)

您的程序对sc.nextInt()的唯一调用出现在外部循环的初始化子句中。因此,将在该循环主体的第一次迭代之前读取输入,并且再也不会读取。结果,外循环的每次迭代都会测试a的相同值,因此您将无限循环或根本不循环。

此外,正如@Gendarme在回答中指出的那样,您的内部循环中有一个System.out.println()。应该将其提起至外部,以便仅在内部的所有迭代完成后才打印,并因此知道最终答案。