【发布时间】:2018-09-10 02:04:32
【问题描述】:
我有一个方法 getNextPrime(int num),它应该识别该方法接收到的值之后最接近的素数。
如果 num 是偶数,它会增加它并再次调用自己。如果它是奇数,它将运行一个 for 循环来检查它是否可以被 3 和 num 的半值之间的奇数整除。如果是,则将 num 增加 2 并且该方法将再次调用自身,否则它将返回新的 num 值,它是一个质数。
问题是,当程序到return语句时,会跳转到if语句,返回num+1的原始值。我调试了一段时间,它只是没有意义。无论我将 return 语句放在哪里,该方法都会跳转到 if 语句,而不是终止该方法并将值返回到调用它的位置。
public int getNextPrime(int num){
if(num % 2 == 0){
//even numbers are not prime
getNextPrime(++num);
}
else{
for(int i = 3; i < (num + 1) / 2; i += 2){
if(num % i == 0) {
getNextPrime(num += 2); //consider odd numbers only
}
}
}
return num; //jumps to if and terminates
}
但是,如果我将 else 语句更改为单独的 if 语句,if(num % 2 != 0) 就可以了。
为什么会这样?
*注意 - 给方法的值大于 3,1、2 和 3 是素数这一事实无关紧要。
【问题讨论】:
-
@JimGarrison 好的,我明白了,这是有道理的。我只是将每个 getNextPrime() 更改为 return getNextPrime() ,现在它可以工作了。谢谢!
-
我把我的评论变成了答案,如果有帮助请采纳,以便其他人找到解决方案。
标签: java if-statement return primes