if (i <= 33) {
variable = x;
} else if (i > 33 && i <= 66) {
variable = y;
} else {
variable = z;
}
有没有办法缩短它?在这种情况下,我无法找到如何使用三元运算符。
答案 0 :(得分:9)
如果你想使用一些疯狂的嵌套三元组:
int variable = i <= 33 ? x : i > 33 && i <= 66 ? y : z
......但不要这样做。让您的代码可读和可维护!
此外,由于@EJP提及in his answer(您应该这样做),i > 33
条件是多余的,因此您可以将其缩短为:
int variable = i <= 33 ? x : i <= 66 ? y : z
我只是直接从你的if / else-s中抓取条款。
答案 1 :(得分:3)
if (i <= 33) {
variable = x;
此时i
为<= 33.
} else if (i > 33 && i <= 66) {
此时我们位于&#39; else&#39;,其中i > 33
通过构造,所以您不需要再次测试它。
variable = y;
} else {
variable = z;
}
所以你可以把它减少到:
if (i <= 33) {
variable = x;
} else if (i <= 66) {
variable = y;
} else {
variable = z;
}
答案 2 :(得分:1)
if (i <= 33) variable = x;
else if (i <= 66) variable = y;
else variable = z;
由于每个子句只有一个语句,因此省略大括号并将语句带到子句的同一行。
答案 3 :(得分:1)
要授予可理解性,您可以先将其提取到方法中,然后: *使用第一个答案 *如果你想要它更容易理解你可以做到这一点
private Object valuePerState(int i){
if (i<33) return x;
if (i>66) return y;
return z;
}
顺便说一句,缩短你的问题的一步是削减完成测试33你做了扭曲
答案 4 :(得分:0)
通过反转比较方向,可以在没有三元运算符的情况下进行简化:
if (i > 66)
{
variable = z;
}
else if (i > 33)
{
variable = y;
}
else
{
variable = x;
}
但正如其他人所说,你可以在不改变方向的情况下简化比较条件。
答案 5 :(得分:0)
你可以使用像以下那样的ternery操作符:
if (i <= 33) {
variable = x;
} else {
variable = (i <= 66) ? y : z;
}
但我认为这比你所拥有的还要糟糕。
请注意i > 33
可以删除,因为else
答案 6 :(得分:0)
如果将x
,y
和z
存储在数组中,则可以使用除法来访问数组的不同元素,这会更快,尤其是如果您知道在这种情况下,你的情况受到0和100的限制。
index = Math.min(Math.max((i-1) / 33, 0), 2);
variable = x[index];
如果i
不能小于0或大于100,则会变为:
index = (i-1) / 33;
variable = x[index];
答案 7 :(得分:0)
我似乎迟到了,但无论如何。这就是我使用链式三元运算符的方式。在我看来,这是相当可读的。
variable = i <= 33 ? x
: i <= 66 ? y
: z ;
由于操作符和空格的位置,此方法也适用于版本控制:您在中间的任何新条件只是diff中的新行,其他条件保持不变。此外,如果有这么多操作员让你感到紧张,你当然可以在条件周围添加括号。
答案 8 :(得分:-1)
由于你正在使用else子句,所以你不必检查33次:
if (i <= 33) {
variable = x;
} else if (i <= 66) {
variable = y;
} else {
variable = z;
}