java - 查找素数的程序没有返回任何数字?

标签 java

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/

相关文章:

java - Java Map Object,以 map 表示的对象

java - 配置 RMI 主机,使其知道哪个客户端端口正在访问它

java - Swing 文本字段有时出现有时不出现?

java - NIFI :How to get node value using variable node name in nifi processor

java - 云类型转换: Error 402: App packaging failed: 'Application exceeds maximum allowed size (536.87MB)'

java - Stripes 框架单元测试 : MockServletContext giving NullPointerException

java - searchValue方法数组出来全是0

java - 在多个 JAVA 类之间共享字符串

java - 缺少依赖项 JBoss 5.1

java - ControlsFX 向导最后一页中的 validator