语法问题:return 语句中的三元和循环
Syntax issues: Ternary and loop inside return statement
我在使用 Java 语法时遇到一些问题。我试着写了一个 prime-check,效果很好
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;
}
我什至可以在 :
之后加入这个吗?无论如何,循环内的三进制是 nonsense/not 可能的,如果我在这里没有遗漏任何东西,所以我在那里使用了 if/else
。
然后最外面的return分号明显少了不知道放哪里
希望我的意图能够得到理解,那么我怎样才能让我的第二个解决方案开始工作呢?你有没有进一步 improvements/suggestions 告诉我如何把这个写得更好?
像您建议的那样连续使用 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 语法时遇到一些问题。我试着写了一个 prime-check,效果很好
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;
}
我什至可以在 :
之后加入这个吗?无论如何,循环内的三进制是 nonsense/not 可能的,如果我在这里没有遗漏任何东西,所以我在那里使用了 if/else
。
然后最外面的return分号明显少了不知道放哪里
希望我的意图能够得到理解,那么我怎样才能让我的第二个解决方案开始工作呢?你有没有进一步 improvements/suggestions 告诉我如何把这个写得更好?
像您建议的那样连续使用 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;
}