与 if 语句相比,如何正确构造 Java 的三元运算符?
How to properly structure Java's ternary operator compared to if statements?
我有一个关于相同代码的两个版本的简单问题,一个使用三元运算符,一个使用 if 语句,以及为什么它们的答案不同。
问题的背景信息。我正在尝试轻松地对整数数组进行排序并获取数组的范围 (max & min)
给出的数组:[6, 2, 3, 8]
If 语句版本:
public int range(int[] num_list) {
int[] min_max = new int[2];
for (int i : statues) {
if (min_max[0] == 0) {
min_max[0] = i;
} else {
if (i < min_max[0]) min_max[0] = i;
}
if (min_max[1] == 0) {
min_max[1] = i;
} else {
if (i > min_max[1]) min_max[1] = i;
}
System.out.println(String.valueOf(min_max[0] + " | " + min_max[1]));
}
}
控制台日志:
6 | 6
2 | 6
2 | 6
2 | 8
三元运算符版本:
public int range(int[] num_list) {
int[] min_max = new int[2];
for (int i : statues) {
min_max[0] = min_max[0] == 0 ? i
: (min_max[0] = i < min_max[0] ? i : i);
min_max[1] = min_max[1] == 0 ? i
: (min_max[1] = i > min_max[1] ? i : i);
System.out.println(String.valueOf(min_max[0] + " | " + min_max[1]));
}
}
控制台日志:
6 | 6
2 | 2
3 | 3
8 | 8
为什么三目运算符版本不对?据我所知,它应该是 if 语句版本的三元副本?
整个事情可以使用 if
条件重写为:
public int range(int[] num_list) {
int[] min_max = new int[2];
for (int i : statues) {
if (min_max[0] == 0 || i < min_max[0]) {
min_max[0] = i;
}
if (min_max[1] == 0 || i > min_max[1]) {
min_max[1] = i;
}
System.out.println(String.valueOf(min_max[0] + " | " + min_max[1]));
}
}
如果您真的想要使用三元表达式:
public int range(int[] num_list) {
int[] min_max = new int[2];
for (int i : statues) {
min_max[0] = (min_max[0] == 0 || i < min_max[0]) ? i : min_max[0];
min_max[1] = (min_max[1] == 0 || i > min_max[1]) ? i : min_max[1];
System.out.println(String.valueOf(min_max[0] + " | " + min_max[1]));
}
}
你有两个错误。这个:
if (min_max[0] == 0) {
min_max[0] = i;
} else {
if (i < min_max[0]) min_max[0] = i;
}
相当于:
min_max[0] = min_max[0] == 0 ? i :
(i < min_max[0] ? i : min_max[0]);
注意,在三元运算符中 "else" 必须始终存在。所以你需要在里面放一些东西——在这种情况下,分配旧值类似于什么都不做。
第二个 if 语句的情况类似。
我有一个关于相同代码的两个版本的简单问题,一个使用三元运算符,一个使用 if 语句,以及为什么它们的答案不同。
问题的背景信息。我正在尝试轻松地对整数数组进行排序并获取数组的范围 (max & min)
给出的数组:[6, 2, 3, 8]
If 语句版本:
public int range(int[] num_list) {
int[] min_max = new int[2];
for (int i : statues) {
if (min_max[0] == 0) {
min_max[0] = i;
} else {
if (i < min_max[0]) min_max[0] = i;
}
if (min_max[1] == 0) {
min_max[1] = i;
} else {
if (i > min_max[1]) min_max[1] = i;
}
System.out.println(String.valueOf(min_max[0] + " | " + min_max[1]));
}
}
控制台日志:
6 | 6
2 | 6
2 | 6
2 | 8
三元运算符版本:
public int range(int[] num_list) {
int[] min_max = new int[2];
for (int i : statues) {
min_max[0] = min_max[0] == 0 ? i
: (min_max[0] = i < min_max[0] ? i : i);
min_max[1] = min_max[1] == 0 ? i
: (min_max[1] = i > min_max[1] ? i : i);
System.out.println(String.valueOf(min_max[0] + " | " + min_max[1]));
}
}
控制台日志:
6 | 6
2 | 2
3 | 3
8 | 8
为什么三目运算符版本不对?据我所知,它应该是 if 语句版本的三元副本?
整个事情可以使用 if
条件重写为:
public int range(int[] num_list) {
int[] min_max = new int[2];
for (int i : statues) {
if (min_max[0] == 0 || i < min_max[0]) {
min_max[0] = i;
}
if (min_max[1] == 0 || i > min_max[1]) {
min_max[1] = i;
}
System.out.println(String.valueOf(min_max[0] + " | " + min_max[1]));
}
}
如果您真的想要使用三元表达式:
public int range(int[] num_list) {
int[] min_max = new int[2];
for (int i : statues) {
min_max[0] = (min_max[0] == 0 || i < min_max[0]) ? i : min_max[0];
min_max[1] = (min_max[1] == 0 || i > min_max[1]) ? i : min_max[1];
System.out.println(String.valueOf(min_max[0] + " | " + min_max[1]));
}
}
你有两个错误。这个:
if (min_max[0] == 0) {
min_max[0] = i;
} else {
if (i < min_max[0]) min_max[0] = i;
}
相当于:
min_max[0] = min_max[0] == 0 ? i :
(i < min_max[0] ? i : min_max[0]);
注意,在三元运算符中 "else" 必须始终存在。所以你需要在里面放一些东西——在这种情况下,分配旧值类似于什么都不做。
第二个 if 语句的情况类似。