为什么4打印为素数

时间:2018-05-29 10:50:16

标签: java

我有一个数组,我想知道这个数组中的素数是多少。 我知道4号不是“素数”但它仍然打印我4号 我错过了什么? 我知道我不能添加第二个if:“if(isPrime&& number!= 4)但我只是想了解我的代码有什么问题以及为什么打印4号 感谢

    int numbe []= {1,2,3,4,5,6,7,8,9,10};

    System.out.println("Prime Numbers are:");
    for(int number : numbe)
    {
        boolean isPrime =true;
        for (int i = 2; i < number / 2 ; i++)
        {
            if ((number % i) == 0)
            {
                isPrime = false;
                break;
            }
        }
        if (isPrime)
            System.out.println("Prime Number: " + number);
    }

6 个答案:

答案 0 :(得分:5)

您在 for-loop for (int i = 2; i < number / 2 ; i++)中犯了错误。

您的for-loop应该是: -

    for (int i = 2; i <= number / 2 ; i++){

      // Your for-loop content.

    }

在您的计划中,当n=4i < number / 2 ;语句失败,因为i已初始化为2 (i = 2)和{{ 1}} 即,(2 <2)。所以i < number / 2 ;没有被执行。因此,通过修改为for-loopi <= number / 2 ;执行一次,for loop执行并if ((number % i) == 0)正常工作。

答案 1 :(得分:5)

您必须按照以下内容更改内部for循环

    for (int i = 2; i <= number / 2 ; i++) {
        ...
    }

否则对于4,您永远不会进入循环(4/222 < 2false进行第一次迭代)和变量{{ 1}}仍为isPrime

答案 2 :(得分:3)

for循环中的逻辑不正确。正确的计划是:

更正:因为如果i小于4/2 = 2,循环终止,所以它永远不会进入循环

int numbe []= {1,2,3,4,5,6,7,8,9,10};

    System.out.println("Prime Numbers are:");
    for(int number : numbe)
    {
        boolean isPrime =true;
        for (int i = 2; i <= number / 2 ; i++)
        {
            if ((number % i) == 0)
            {
                isPrime = false;
                break;
            }
        }
        if (isPrime)
            System.out.println("Prime Number: " + number);
    }
} 

答案 3 :(得分:1)

for循环的主体永远不会用数字4执行。

执行循环的条件是i < number / 2,我的定义是int i = 2

这意味着条件将解析为2 < 4 / 2,即2 < 2,而2并不严格低于自身。您的比较运算符应为“劣等或等于”,即<=

因此,它至少会尝试检查4是否可以除以2,它可以将4标记为非素数。

也许你可以用i = 1开始。呃,实际上不是。

答案 4 :(得分:1)

由于for (int i = 2; i < number / 2 ; i++)条件。

这里数字= 4,它检查2&lt; 2,这是假的,因此它不进入for循环,打印4是素数。

您需要将您的病情改为: -

for (int i = 2; i <= number / 2 ; i++)

答案 5 :(得分:1)

由于你的for循环从2开始并且如果i小于4/2 = 2则终止,实际上,你永远不会进入for循环。

使用i&lt; = number / 2

更改退出条件