[英]What is the difference between these two methods for checking if a number is a prime?
我写了一个检查数字是否为素数的方法:
static boolean isPrime(int x) {
for (int i = 2; i <= Math.sqrt(x); i++) {
if (x % i == 0)
return false;
}
return true;
}
在我们正在学习的一系列练习中,解决方案是:
static boolean isPrime(int x) {
boolean hasDivisors = false;
for (int i = 2; i <= Math.sqrt(x); i++) {
if (x % i == 0) {
hasDivisors = true;
break;
}
}
return !hasDivisors;
}
在我的情况下,如果我找到一个除数,我返回该数字不是素数( return false
)并且替换了第二种方法break
的需要。 唯一明显的原因是第二种方法只使用一个return
语句。
有这个原因(速度/记忆明智)?
这主要是风格问题。 某些编码约定规定方法只有一个return
语句。 这在您必须明确释放资源的语言中很有意义,但在Java中没有任何功能影响。
就个人而言,我更愿意在你知道结果后立即return
(就像在第一个片段中一样),但同样,这是个人风格的问题。
这两种解决方案都有效,并且两者都适用于您已经确定的所有原因。 好的分析。 正如其他人所指出的,差异纯粹是风格上的。 以下是关于java中单个return语句样式的有趣讨论 。
在性能方面,我不希望两种方法之间存在显着差异。 但如果您想确定,请执行基准测试。 如果您希望获得真正的性能提升,可以通过替换以下内容来消除对Math.sqrt()
的昂贵调用:
for (int i = 2; i <= Math.sqrt(x); i++) {
同
for (int i = 2; i*i <= x; i++) {
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.