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