语法问题:返回语句中的三元和循环

时间:2015-10-22 11:48:57

标签: java loops return syntax-error ternary-operator

我在Java语法方面遇到了一些问题。我试着写一个质检,这很好用

public static boolean isPrime(int n) {
        boolean out;
        if (n < 2)
            out = false;
        else if (n == 2)
            out = true;
        else if (n % 2 == 0)
            out = false;
        else {
            double sqrtN = Math.sqrt(n);
            for (int i = 3; ; i += 2) {
                if (i > sqrtN)
                    return out = true;
                else if (n % i == 0)
                    return out = false;
            }
        }
        return out; 
}

现在我想更简洁地写一下:摆脱变量声明out并使用ternary代替if。以下是我到目前为止的情况:

public static boolean isP(int n) {
        return
            (n < 2) ? false :
            (n == 2) ? true :
            (n % 2 == 0) ? false : {
            double sqrtN = Math.sqrt(n);
            for (int i = 3; ; i += 2) 
                if (i > sqrtN) 
                    return true;
                else if (n % i == 0)
                    return false;
            }
}

我不知道如何处理块语句

                {
                double sqrtN = Math.sqrt(n);
                for (int i = 3; ; i += 2) 
                    if (i > sqrtN) 
                        return true;
                    else if (n % i == 0)
                        return false;
                }

我可以在:之后加入吗?如果我在这里没有遗漏某些东西,那么循环中的三元是无意义/不可能的,所以我在那里使用了if/else

然后最外面的回归显然没有分号,我不知道在哪里适合它。

希望我的意图得以实现,那么我怎样才能让我的第二个解决方案开始工作?你有进一步的改进/建议如何写得更好吗?

1 个答案:

答案 0 :(得分:2)

使用像你建议的一系列4个三元运算符并不是一个好主意,因为它有点难以阅读。如果您担心的是代码行数,您可以使用以下方法缩短方法:

public static boolean isPrime(int n) {
  if (n == 2) return true;
  if (n < 2 || n % 2 == 0) return false;

  double sqrtN = Math.sqrt(n);
  for (int i = 3; i <= sqrtN; i += 2) {
    if (n % i == 0) return false;
  }
  return true;
}