不改变布尔值

时间:2017-08-19 08:04:24

标签: java for-loop math

我有一种测试数字是素数的方法。我用8445测试了这个方法,因为它可以除以3.它虽然for循环有3,你可以在控制台中看到,它打印为true。那个println是我没有拍照的主要方法。

public boolean Primzahlerkennen(int i) 
{
    boolean bool = true;

    for (int a = 2; a < i; a ++) {
        if (i % a == 0)
            bool = false;
        else
            a++;

        if (a==3){
            System.out.println("here "+a);
            System.out.println(8445%3);
        }
    }

    return bool;
}

为什么8445 % 3 == 0无法将值更改为false?

1 个答案:

答案 0 :(得分:4)

问题是你增加a两次,一次在for语句中,一次在循环体内。

这会导致你的循环跳过一些除数(其中三个是除数)。

进一步的建议:

  1. 给你的布尔变量一个反映其目的的名称(而不是bool)。

  2. 你甚至不需要检查除2以外的除数,因为它们都不是素数。

  3. 你可以在sqrt(i)停止循环(弄清楚为什么这是正确的留下作为读者的练习)。

相关问题