Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法缩短这段代码?也许是三元表达式? if(i33&&i_Java_Ternary - Fatal编程技术网

Java 有没有办法缩短这段代码?也许是三元表达式? if(i33&&i

Java 有没有办法缩短这段代码?也许是三元表达式? if(i33&&i,java,ternary,Java,Ternary,如果您想使用一些疯狂的嵌套ternaries: if (i <= 33) { variable = x; } else if (i > 33 && i <= 66) { variable = y; } else { variable = z; } 我只是直接从if/else-s中获取子句。您可以通过反转比较方向来简化,而无需使用三元运

如果您想使用一些疯狂的嵌套ternaries:

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

我只是直接从if/else-s中获取子句。

您可以通过反转比较方向来简化,而无需使用三元运算符:

int variable = i <= 33 ? x : i <= 66 ? y : z

但正如其他人所指出的,您可以简化比较条件,而无需反转方向。

您可以使用ternery运算符,如:

if (i > 66) 
{
    variable = z;
}
else if (i > 33) 
{
    variable = y;
} 
else 
{
    variable = x;
}
if(i)
此时,我们处于'else'中,其中通过构造
i>33
,因此您不需要再次测试它

    } else if (i > 33 && i <= 66) {
因此,您可以将其简化为:

        variable = y;
    } else {
        variable = z;
    }

if(i因为您使用的是else子句,所以不必对33进行两次检查:

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

if(i
if(i如果将
x
y
z
存储在一个数组中,则可以使用除法访问数组的不同元素,这将更快,尤其是当您知道您的条件以0和100为界时

    if (i <= 33) variable = x;
    else if (i <= 66) variable = y;
    else variable = z;
如果
i
不能小于0或大于100,则变为:

index = Math.min(Math.max((i-1) / 33, 0), 2);
variable = x[index];

要授予可理解性,您可以首先将其提取到方法中,然后: *使用第一个答案 *如果你想让它更容易理解,你可以这样做

index = (i-1) / 33;
variable = x[index];
private Object valuePerState(int i){
如果(i66)返回y;
返回z;
}

顺便说一句,缩短问题的一个步骤是取消33的完成测试,你完成了twist,但无论如何,我似乎迟到了。下面是我使用链式三元运算符的方法。在我看来,这是相当可读的

private Object valuePerState(int i){
    if (i<33) return x;
    if (i>66) return y;
    return z;
}

variable=i@JonathonReinhart我在我的生产环境中见过这样的代码。调试并不有趣。:)如果必须在三元上设置断点,则不能这样做。@vkg是的。因此,“不要这样做”。也许我应该将其改为“请,请不要这样做!”哈哈,就连作者都同意你永远不应该做的回答,投票率也上升了?真的吗?@durron597这是第一个也是唯一一个真正回答这个问题的人。:(原来的帖子并没有把它说成“也许”是一个三元表达。他明确地问到了如何制作三元作品。)你可以,但不必反转方向,就像。我没说你必须反转。这只是一种方式:)但这是你提到的唯一方法。这意味着这是唯一的方法,与你的评论相反。没有这样的暗示。达到了收益递减点。什么数据类型是
i
,你能对范围进行任何限制吗?我想你可以做一些类似
variable={x,y,z}[i/33]
i是一个介于0到100I之间的整数,我将删除
i>33&&
,但不删除它。如果它仍然“太复杂”,只需将其隐藏在一个方法中,那么它是一个单行调用:
variable=toneareststerming(i)
.Redundant.已经演示了这一点。@JonathonReinhart EJP的答案在我发布时不可见。是的,但是您的页面没有刷新。时间戳不存在。
    if (i <= 33) variable = x;
    else if (i <= 66) variable = y;
    else variable = z;
index = Math.min(Math.max((i-1) / 33, 0), 2);
variable = x[index];
index = (i-1) / 33;
variable = x[index];
private Object valuePerState(int i){
    if (i<33) return x;
    if (i>66) return y;
    return z;
}
variable = i <= 33 ? x
         : i <= 66 ? y
         : z ;