检查数字是否为素数的这两种方法有什么区别?

时间:2015-05-17 18:31:13

标签: java return

我写了一个检查数字是否为素数的方法:

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语句。

这是否有原因(速度/记忆明智)?

2 个答案:

答案 0 :(得分:5)

这主要是风格问题。某些编码约定规定方法只有一个return语句。这在您必须明确释放资源的语言中很有意义,但在Java中没有任何功能影响。

就个人而言,只要您知道结果,我就更喜欢return(就像在第一个片段中一样),但同样,这是个人风格的问题。

答案 1 :(得分:3)

这两种解决方案都有效,并且两者都有效,因为您已经确定了所有原因。好的分析。正如其他人所指出的,差异纯粹是风格上的。这是一个interesting discussion about the single return statement style in java

在性能方面,我不希望两种方法之间存在显着差异。但如果您想确定,请执行基准测试。如果您希望获得真正的性能提升,可以通过替换以下内容来消除对Math.sqrt()的昂贵调用:

for (int i = 2; i <= Math.sqrt(x); i++) {

for (int i = 2; i*i <= x; i++) {