Java 有没有办法缩短这段代码?也许是三元表达式? if(i33&&i
如果您想使用一些疯狂的嵌套ternaries: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中获取子句。您可以通过反转比较方向来简化,而无需使用三元运
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(iif(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 ;