java - 不改变 boolean 值

标签 java for-loop math

我有一个方法来测试一个数是否是素数。我已经用 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 语句中,一次是在循环体本身。

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

进一步的建议:

  1. 为您的 boolean 变量起一个反射(reflect)其用途的名称(而不是bool)。

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

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

关于java - 不改变 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45769213/

相关文章:

java - 有没有一种方法可以在使用列表时不更改列表中的原始值?

javascript - 为什么 Javascript 中的这个 for 循环给我一个数字而不是从 0 到 4 的数字列表?

python - 从Python中的字典中获取键值

c - 求解n个线性方程

java - 如何使用 wamp 服务器将 BIRT 报告与 php 集成?

java - 接口(interface)内的可修改常量

java - Java中的整数除法

c++ - 对我的绘图项目的建议

java - 如何制作正在处理的游戏首页?

java - 如何避免原始类型混合泛型继承和内部类?