2011-12-02 122 views
2

我有一個很大的Ifs列表,我想將它更改爲switch語句。目前,它看起來像這樣:開關情況下的多個值/轉換ifs到switch語句

if(x == 1){ 
    ... 
} 
if(x == 2){ 
    ... 
} 
if(myArray.contains(x)){ 
    ... 
} 

實際上它比這更長一點,但它是第三,如果在混淆我的例子 - 我該如何改變這種狀況圍繞得到它的開關工作,或它甚至有可能嗎?

回答

17

你可以做這樣的事情,但根據您的代碼可能退出條件因人而異:

switch (x) { 
case 1: 
    ... 
    break; 
case 2: 
    ... 
    break; 
case 3: 
case 4: 
    ... multi-case 
    break; 
default: 
    if(myArray.contains(x)){ 
    ... 
    } 
} 
+1

這也略有不同:開關/箱是一個'if' ...'否則if'。在其中x在「then」塊語句中被修改的情況下,整體行爲將會不同。 – rds

+3

與問題中的前兩個ifs不同,即使前面的一個也是如此,第三個仍然可以是真的。 'x'不能同時等於'1'和'2',但它可以等於'1'並且同時包含在'myArray'中。將if語句移入'case'語句'default'可能不是正確的解決方案。 –

+0

對不起,我應該澄清 - 數組中的值將永遠不會匹配我檢查的其他任何內容,所以這不是問題。儘管如此。 – Steve

1

您只能在x值上開關。這意味着最後一個條件將不會是交換機的一部分:

switch(x) { 
case 1: 
    ... 
    break; 
case 2: 
    ... 
    break; 
} 
if(myArray.contains(x)){ 
    ... 
} 
1

是的,這是可能的。 switch語句將使它更簡潔,更易於維護。你必須擔心x,因爲它必須是編譯時常量。

switch(x) { 
case 1: 
    doSomething(); 
    break(); 
case 2: 
    doSomethingElse(); 
    break(); 

default: 
if(myArray.contains(x)){ 

} 


//etc... 
} 
3

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

+0

+1。非常好的答案。 –