我正在尝试使用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) == false
是false
-即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/