if (i <= 33) {
variable = x;
} else if (i > 33 && i <= 66) {
variable = y;
} else {
variable = z;
}
有没有办法缩短这一点?在这种情况下,我找不到如何使用三元运算符。有没有办法缩短这段代码?也许是一个三元的表达?
if (i <= 33) {
variable = x;
} else if (i > 33 && i <= 66) {
variable = y;
} else {
variable = z;
}
有没有办法缩短这一点?在这种情况下,我找不到如何使用三元运算符。有没有办法缩短这段代码?也许是一个三元的表达?
如果你想使用一些疯狂的嵌套ternaries:
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直接。
您可以通过反转比较方向,而不三元操作简化:
if (i > 66)
{
variable = z;
}
else if (i > 33)
{
variable = y;
}
else
{
variable = x;
}
但正如其他人指出,可以简化比较条件无方向反转。
您可以但不必扭转方向,如[EJP显示](http://stackoverflow.com/a/23644807/119527)。 –
我没有说你必须扭转。这只是一种方式:) –
但它是你提到的唯一方法。 – EJP
您可以使用ternery运营商,如:
if (i <= 33) {
variable = x;
} else {
variable = (i <= 66) ? y : z;
}
但我认为这是比你有什么更糟糕。
注意,是因为它已经被else
if (i <= 33) {
variable = x;
暗示此时i
i > 33
可以被删除是<= 33.
} else if (i > 33 && i <= 66) {
在这一点上,我们是在“其他”,其中i > 33
由施工,所以你不需要再次测试。
variable = y;
} else {
variable = z;
}
所以,你可以这样减少:由于您使用的是else子句
if (i <= 33) {
variable = x;
} else if (i <= 66) {
variable = y;
} else {
variable = z;
}
关于'> 33'多余的好处。 +1 – asteri
,你不必对证33两次:
if (i <= 33) {
variable = x;
} else if (i <= 66) {
variable = y;
} else {
variable = z;
}
冗余。 [EJP的答案](http://stackoverflow.com/a/23644807/119527)已经证明了这一点。 –
@JonathonReinhart当我发布时,EJP的回答是不可见的。 –
它*是*,但您的页面没有刷新。时间戳不会说谎。 –
if (i <= 33) variable = x;
else if (i <= 66) variable = y;
else variable = z;
由于每个子句只有一个语句,因此可省略大括号,并将语句带到该子句的同一行。
如果存储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];
授予可理解你可以先解压缩到一个方法,那么: *使用第一个答案 *如果你想让它更可以理解的,你可以做到这一点
private Object valuePerState(int i){
if (i<33) return x;
if (i>66) return y;
return z;
}
BTW一步缩短您的问题是削减唐e测试33你完成扭曲
我似乎迟到了派对,但无论如何。这是我使用链式三元运算符的方式。在我看来这是相当可读的。
variable = i <= 33 ? x
: i <= 66 ? y
: z ;
由于运营商和空白的位置,这种方法也与版本控制效果很好:你在中间坚持任何新的条件简直就是在差异中新行,留下其他条件不变。另外,如果有那么多的操作员让你感到紧张,你当然可以在条件中加上括号。
什么数据类型是'我',你可以给范围的任何限制?我想你可以做一些像'variable = {x,y,z} [i/33]' – MickLH
我是一个int,范围从0到100 – user3610410
我会删除'i> 33 &&'单独。如果它仍然“太复杂”,只需将其隐藏在一个方法中 - 那么它是一个单行调用:'variable = toNearestSegment(i);'。 – user2864740