public ArrayList Numbers(int upper, int lower)
{
ArrayList<Integer> primeNumbers = new ArrayList<Integer>();
boolean decider;
for(int x = lower; x <= upper; x++)
{
decider = true;
for(int y = 2; y < upper; y ++)
{
if(x % y == 0)
decider = false;
}
if(decider == true)
primeNumbers.add(x);
}
return primeNumbers;
}
我编写了以下代码来确定一个数字是否是质数。我的想法是,如果我默认一个 boolean 值为 true,并且一个数字除以另一个数字余数为 0,那么该 boolean 值将设置为 false。
for(int x = lower; x <= upper; x++)
{
decider = true;
for(int y = 2; y < upper; y ++)
{
if(x % y == 0)
decider = false;
}
if(decider == true)
primeNumbers.add(x);
}
对于这一部分,这就是我尝试做的。检查上限和下限之间的每个数字,看看是否有任何除法余数为 0。如果是,则 boolean 值为 false,并且不会将其添加到我的数组中。
由于某种原因,数组没有接收到上限和下限之间的数字。我无法发现问题所在。其他人可以吗?
编辑-我在发现另一个错误后编辑了这篇文章,因为程序从返回所有值变为不返回任何值。
最佳答案
这是我在您的代码中看到的逻辑问题。 y
中的内部 for
循环将在大部分时间覆盖包含 x 值的范围,因为循环的上限也是upper
。因此,在大多数情况下,您会将一个只能被自身整除的数字视为不是素数,而事实上它是素数。您应该在到达目标 x
之前停止该循环。而且,如果你找到除数,你可能会崩溃。
for(int x = lower; x <= upper; x++) {
decider = true;
for (int y = 2; y < x; y ++) { // can probably make this bound even tighter
if (x % y == 0) {
decider = false;
break;
}
}
if (decider)
primeNumbers.add(x);
}
return primeNumbers;
这是一个演示,显示上述逻辑正常工作:
Demo
关于java - 查找素数的程序没有返回任何数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49399040/