Java 处理多个布尔组合
我有5个布尔变量a,b,c,d和e。因此,对于每个变量的true和false的不同组合,都有不同的打印语句 比如说: a、b、c、d、e——打印报表 T—打印所有真实值 打印一些文本 T F F——打印一些其他文本Java 处理多个布尔组合,java,boolean,combinations,boolean-logic,Java,Boolean,Combinations,Boolean Logic,我有5个布尔变量a,b,c,d和e。因此,对于每个变量的true和false的不同组合,都有不同的打印语句 比如说: a、b、c、d、e——打印报表 T—打印所有真实值 打印一些文本 T F F——打印一些其他文本 可能有32种不同的可能组合。我正在写一个java代码。所以问题是,对于每种情况,都应该打印出不同的声明。那么,处理此问题的最佳解决方案是什么,而不是使代码更加混乱和难以管理的常规if语句呢?一个选项是基本上构建一个位掩码: int mask = (a ? 1 : 0) |
可能有32种不同的可能组合。我正在写一个java代码。所以问题是,对于每种情况,都应该打印出不同的声明。那么,处理此问题的最佳解决方案是什么,而不是使代码更加混乱和难以管理的常规if语句呢?一个选项是基本上构建一个位掩码:
int mask = (a ? 1 : 0) |
(b ? 2 : 0) |
(c ? 4 : 0) |
(d ? 8 : 0) |
(e ? 16 : 0);
System.out.println(statements[mask]);
。。。其中,
语句
是长度为32的数组。因此,在您的情况下,语句[31]
将是“全部真实的”,而语句[30]
将是“一些文本”等。将真
解释为位设置,将假
解释为位未设置。这样,您可以将所有组合映射到int值0。。三十一,
而不是简单地定义
String[] outputs = new String[32]{"text 1", "text2", ... , "text 31"};
除了打印
输出[bitconstallation]
之外,为什么不将bitmask函数通用化以传递任意数量的布尔值(可能使用BigDecimal会更好->根据具体需要):
/**
*获取布尔数组中的所有布尔组合。
*
*@param booleans
*@返回
*/
公共静态整型GetBoolean组合(最终布尔值…布尔值){
int res=0;
for(int n=0;n
如果要打印的文本与示例中类似,则不需要嵌套If:for(boolean b:booleans)b?out(“T”):out(“F”)代码>。预期产出是否比这更复杂?
/**
* 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;
}