java - 语法问题 : Ternary and loop inside return statement

标签 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;
            }
}

我不知道如何处理 block 语句

                {
                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

那么最外面的return显然缺少一个分号,我不知道该把它放在哪里。

希望我的意图得到传达,那么我怎样才能让我的第二个解决方案发挥作用呢?您对我如何写得更好有进一步的改进/建议吗?

最佳答案

像您建议的那样使用连续的 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;
}

关于java - 语法问题 : Ternary and loop inside return statement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33280302/

相关文章:

java - 读取 .xml 文件进行解析时出现 FileNotFoundException

java - 对齐列

java - 为什么 ByteBuffers 的 hashCodes 是一样的?

java - "Wrong"在 Java 中使用 if 与三元运算符时的返回类型

java - 为什么 Java EJB 应用程序没有为其库预定义相对路径?

r - 根据 R 中 V2 中设置的条件计算 V1 列中的值之和

jquery - 从动态生成的字段发送多个ajax数据

c - 如何找到数组中重复次数最多的?

java - 我无法从 plpgsql 函数中读取 java 返回的数组

java - 从调用 Int 的方法返回 boolean 值