我有一种测试数字是素数的方法。我用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?
答案 0 :(得分:4)
问题是你增加a
两次,一次在for
语句中,一次在循环体内。
这会导致你的循环跳过一些除数(其中三个是除数)。
进一步的建议:
给你的布尔变量一个反映其目的的名称(而不是bool
)。
你甚至不需要检查除2以外的除数,因为它们都不是素数。
你可以在sqrt(i)
停止循环(弄清楚为什么这是正确的留下作为读者的练习)。