我正在尝试使用while语句整理一些有关“重复”的作业。作业要求我输入一个数字,并告诉我该数字是否是素数。到目前为止,我已经做到了:

class Prime {
    boolean esPrime(int n) {
        boolean prime = true;
        int divisor = 2;
        while (prime && divisor != n) {
            if (n % divisor == 0) {
                prime = false;
            } else {
                divisor++;
            }
        }

        return prime;
    }
}


然后我在main方法中声明了这个“布尔测试”,以检查那段代码是否起作用:

boolean testEsPrime = esPrime(2) == false;

public static void main(String[] args) {
    Prime p = new Prime();
    System.out.println("testEsPrime = " + p.testEsPrime);
}


而且每当我运行它时,我都会得到false,而且似乎无法发现错误。任何线索为什么会发生这种情况?

最佳答案

它不是世界上最高效的代码,但对我有用(请参见下文)。我不确定这是什么问题!顺便说一句,您只需要测试2和奇数因子,直到被测对象的平方根,一般而言,更有效的方法(用于确定本体中的质数是多少)是使用环戊烯橡胶筛(http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes)。

进行测试时得到false的原因是esPrime(2) == falsefalse-即esPrime(2) == true

class Prime {
    boolean esPrime(int n) {
        boolean prime = true;
        int divisor = 2;
        while (prime && divisor != n) {
            if (n % divisor == 0) {
                prime = false;
            }
            else {
                divisor++;
            }
        }
        return prime;
    }

    public static void main(String[] args) {
        Prime p = new Prime();
        for(int i=2; i<10; ++i) {
            System.out.println("esPrime(" + i + ") = " + p.esPrime(i));
        }
    }
}


输出:

esPrime(2)=真
esPrime(3)=真
esPrime(4)=假
esPrime(5)=真
esPrime(6)=假
esPrime(7)=真
esPrime(8)=假
esPrime(9)=假

关于java - 我无法发现的重复错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8114442/

10-13 03:37