Java - 为什么我的素数程序打印最后一个数字?

时间:2014-10-20 00:47:46

标签: java loops boolean

我应该为Java Intro类编写一个程序,列出素数到用户输入的数字。但是,根据我的代码,如果用户输入了一个素数,我的程序就不会列回该数字,即使它在它的素数时应该这样做。有人可以给我一个提示,说明它为什么不起作用?

    int userNum=kbd.nextInt();
    if (userNum<2){
        System.out.println("Not a valid number.");
        System.exit(1);
    }
    System.out.println("The prime numbers up to your integer are:");
    for (int num1 = 2; num1<userNum; num1++) {   
        boolean prime = true;


        for (int num2 = 2; num2 < num1; num2++) {
            if (num1 % num2 == 0) {
                prime = false;
                break; 

            }
        }

        // Prints the number if it's prime.
        if (prime) {
            System.out.print(num1 + " ");
        }
    }

例如,当我输入&#34; 19,&#34;该程序打印所有素数,包括&#34; 17。&#34; 谢谢!

4 个答案:

答案 0 :(得分:1)

您需要num1将值userNum作为要检查的最后一个值。

因此,您需要将num1 < userNum替换为num1 <= userNum

答案 1 :(得分:0)

你的循环条件为num1 < userNum。这意味着它允许所有数字低于userNum。您想要的是以下所有数字,包括userNum,因此您需要num1 <= userNum

循环的开始就是这样:

    for (int num1 = 2; num1 <= userNum; num1++) {   

答案 2 :(得分:0)

更改此

num1<userNum

num1<=userNum

在您for循环中两个数字相等之前停止的那一刻。

答案 3 :(得分:0)

将for语句的结束条件更改为num1&lt; = userNum。