我有一個很大的Ifs列表,我想將它更改爲switch語句。目前,它看起來像這樣:開關情況下的多個值/轉換ifs到switch語句
if(x == 1){
...
}
if(x == 2){
...
}
if(myArray.contains(x)){
...
}
實際上它比這更長一點,但它是第三,如果在混淆我的例子 - 我該如何改變這種狀況圍繞得到它的開關工作,或它甚至有可能嗎?
我有一個很大的Ifs列表,我想將它更改爲switch語句。目前,它看起來像這樣:開關情況下的多個值/轉換ifs到switch語句
if(x == 1){
...
}
if(x == 2){
...
}
if(myArray.contains(x)){
...
}
實際上它比這更長一點,但它是第三,如果在混淆我的例子 - 我該如何改變這種狀況圍繞得到它的開關工作,或它甚至有可能嗎?
你可以做這樣的事情,但根據您的代碼可能退出條件因人而異:
switch (x) {
case 1:
...
break;
case 2:
...
break;
case 3:
case 4:
... multi-case
break;
default:
if(myArray.contains(x)){
...
}
}
您只能在x值上開關。這意味着最後一個條件將不會是交換機的一部分:
switch(x) {
case 1:
...
break;
case 2:
...
break;
}
if(myArray.contains(x)){
...
}
是的,這是可能的。 switch語句將使它更簡潔,更易於維護。你必須擔心x
,因爲它必須是編譯時常量。
switch(x) {
case 1:
doSomething();
break();
case 2:
doSomethingElse();
break();
default:
if(myArray.contains(x)){
}
//etc...
}
這看起來不太面向對象。
嘗試使用「替換條件與多態性」 http://martinfowler.com/refactoring/catalog/replaceConditionalWithPolymorphism.html
一個地圖可以幫你做一些查詢,如果你需要從int到自定義對象轉換重構你的代碼。
switch語句只能用於測試x的平等
所以,如果not equality conditions
像(if(myArray.contains(x))
)一定要來結尾,那麼您可以複製粘貼到交換機的默認部分
它看起來這樣
switch (x) {
case 1: ...; break;
case 2: ...; break;
default: if(myArray.contains(x)) ...
}
如果not equality conditions
將需要在中間,那麼它不可能使用開關。
參考:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html
+1。非常好的答案。 –
這也略有不同:開關/箱是一個'if' ...'否則if'。在其中x在「then」塊語句中被修改的情況下,整體行爲將會不同。 – rds
與問題中的前兩個ifs不同,即使前面的一個也是如此,第三個仍然可以是真的。 'x'不能同時等於'1'和'2',但它可以等於'1'並且同時包含在'myArray'中。將if語句移入'case'語句'default'可能不是正確的解決方案。 –
對不起,我應該澄清 - 數組中的值將永遠不會匹配我檢查的其他任何內容,所以這不是問題。儘管如此。 – Steve