Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理多个布尔组合_Java_Boolean_Combinations_Boolean Logic - Fatal编程技术网

Java 处理多个布尔组合

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) |

我有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) |
           (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;
}