2013-01-23 58 views
0

我有5個布爾變量a,b,C,d和e。因此,對於每個變量的true和false的每種不同組合,都有不同的打印語句。處理多個布爾組合

說,例如:

ABCDE ---打印對帳單

TTTTT - 打印所有trues

TTTTF - 打印某些文本

TTTFF - 打印一些其他文字

........

可能有32種不同的可能組合。我正在寫一個Java代碼。所以問題是每種情況都應該有不同的陳述打印出來。那麼,什麼可能是最好的解決方案來處理這個問題,而不是常規的if語句,這會使代碼更容易混淆和無法管理?

+0

如果文本打印,就像是你的榜樣,沒有必要嵌套,如果:'爲(布爾b:布爾值)b? out(「T」):out(「F」);'。預期產出是否比這更復雜? – assylias

回答

8

一種選擇是,基本建立一個位掩碼:

int mask = (a ? 1 : 0) | 
      (b ? 2 : 0) | 
      (c ? 4 : 0) | 
      (d ? 8 : 0) | 
      (e ? 16 : 0); 

System.out.println(statements[mask]); 

...其中statements是一個長度爲32的數組所以你的情況,statements[31]將是「所有trues」,並statements[30]會「一些文本」等。

1

解釋爲true爲位設置,而false爲位未設置。這種方式可以爲int值0所有組合的映射。31.

不是簡單地定義

String[] outputs = new String[32]{"text 1", "text2", ... , "text 31"}; 

比打印

1

爲什麼不能一概而論你的位掩碼功能通過任意數目布爾(problably使用的BigDecimal會更好 - >達的具體需求):

/** 
* Gets all the boolean combinations in the array of booleans. 
* 
* @param booleans 
* @return 
*/ 
public static int getBooleanCombinations(final boolean... booleans) { 
    int res = 0; 
    for (int n = 0; n < booleans.length; n++) { 
      final double pow = Math.pow(2, n); 
      final boolean bool = booleans[n]; 
      final Double localres = Double.valueOf(bool ? pow : 0); 
      res = localres.intValue() | res; 
    } 
    return res; 
}