有没有办法缩短这段代码?也许是三元表达?

时间:2014-05-14 02:38:47

标签: java ternary

    if (i <= 33) {
            variable = x;
        } else if (i > 33 && i <= 66) {
            variable = y;
        } else {
            variable = z;
        }

有没有办法缩短它?在这种情况下,我无法找到如何使用三元运算符。

9 个答案:

答案 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

已经隐含了{{1}}

答案 6 :(得分:0)

如果将xyz存储在数组中,则可以使用除法来访问数组的不同元素,这会更快,尤其是如果您知道在这种情况下,你的情况受到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;
}