2014-02-28 51 views
-1

考慮以下代碼 -如何避免這種情況的其他

if(enable) { 
    if(enableCar) { 
    // do something 
    } else if(enableComputer) { 
    // do something 
    } else if(enableTV) { 
    // do something 
    } else { 
    otherChoice(); 
    } 
} else { 
    otherChoice(); 
} 

// More code here so return isn't possible 

我應該怎麼避免這麼多else報表,我不能刪除if(enable)因爲carEnable可以返回true,而enable本身是假的。

我不能用回報,因爲我有以下

所以更多的代碼,我應該怎麼避免這麼多else報表?

當然這只是一個例子:)

感謝

+0

並非意,如果'enable'是真實的,'enableCar'和'enableComputer'和'enableTV'是所有虛假的'otherChoice()'運行三次? –

+0

「只是一個例子」< - 沒有上下文,沒有真正有意義的答案可以給出。也許你的方法需要重構,特定的類或幾個類,或...現在,沒有人可以告訴 – fge

+0

如果enableCar,enableComputer和enableTV都是假的,你可以運行另一個選擇代碼三次?這三個布爾值是相互排斥的,或者你可以將三個布爾值設置爲true? – Steve

回答

2

您還沒有做出您的要求完全清楚,但我覺得你的要求,需要switch塊。

[編輯]:由於後來增加了Java的標籤 - 你可以做的就是使用enum

+4

這裏應該提到的是,在Java中,開關在布爾型上不起作用。 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html –

0

,你也可以嘗試使用else if和一個else

if (enableCar) { 
     // do something 
    } 
    else if (enableComputer) { 
     // do something 
    } 
    else if (enableTV) { 
     // do something 
    } else { 
     otherChoice(); 
    } 
-2

您可以創建一個switch語句

if(enable) 
{ 
    switch() 
    { 
     case enableCar: 
     // do some code 
     break; 
     case enableComputer: 
     //do some code 
     break; 
    } 
} 
+0

Ur代碼顯示該方法的結果可能是布爾輸出。 switch語句將是這個選項。我沒有看到我的解決方案有問題。然而,它沒有說明使用的語言,所以這可能不適用於你正在尋找的東西,但可能對別人有幫助 – Kbaugh

0

的僞代碼缺乏很多信息。有時可以通過使用多態性來避免if ... else的級聯。看看this線程。並閱讀這篇關於replacing conditionals with polymorphism的文章。

+0

我想你是對的..好吧然後我會關閉/刪除這篇文章。所以人們不會感到困惑......我不能關閉它。 – Israelg99

+0

你不必親自關閉它。如果mods認爲帖子沒有價值,他們會刪除它。其實我認爲這個問題(或更好的答案)可能對某些人有用。 – Axel

0

實際上,良好的結構分析是一種通用的方法,如何擺脫if-else語句,因爲結構本身包含一些信息,您必須通過if-else語句來決定。

所以你應該考慮你應該需要哪些類以及它們具有哪些責任和變量。你的例子太抽象了,所以我不能準確地告訴你你應該做什麼。

例如 - 你應該考慮命令模式:http://www.oodesign.com/command-pattern.html

然後,你可以使用「commad.do()」,並命令自己知道什麼,做什麼,因爲每個命令都有自己的攝像機功能性。

1

您可以將選項添加到枚舉並將其傳遞給交換機。

public enum EnableOptions 
{ 
    enableCar, 

    enableComputer, 

    enableTV 


} 

然後創建一個選擇項變量並傳遞到交換機:

EnableOptions option = EnableOptions.enableCar; 



if(enabled) 
{ 

    switch(option) 
    { 
    case EnableOptions.enableCar: 


      //method 
      break; 
    case EnableOptions.enableComputer: 

      // methods 
      break; 

     etc... for all of your options 

     default: 

     //something 
     break; 

    } 

} 
相關問題