我有一个方法来测试一个数是否是素数。我已经用 8445 测试了该方法,它不是质数,因为它可以被 3 整除。尽管 for 循环有 3,正如您在控制台中看到的那样,它打印 true。那个println在main方法里面,我没拍照。
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?
最佳答案
问题是您将 a
递增了两次,一次是在 for
语句中,一次是在循环体本身。
这会导致您的循环跳过一些除数(三个是其中之一)。
进一步的建议:
为您的 boolean 变量起一个反射(reflect)其用途的名称(而不是
bool
)。您甚至不需要检查除 2 以外的除数,因为它们都不是质数。
您可以在
sqrt(i)
处停止循环(弄清楚为什么这是正确的留给读者作为练习)。
关于java - 不改变 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45769213/