将Boolean的四个组合转换为true / false - 使用IF Else语句

时间:2013-08-28 06:57:11

标签: java algorithm if-statement boolean-operations

我实际上尝试将四种不同的布尔值转换为true / false。

我的情况是,

   True false false false Then true else false
   false True false false Then true else false
   false false True false Then true else false
   false false false True Then true else false

我试过这样,

int a=1;
int b=0;
int c=0;
int d=0;

int cnt=0;

// A block of code will be executed only when any one of the four variables is 1 and
//the rest of them is 0. and another block will be executed when the above mentioned
//condition become false.

if (a==0) { cnt+=1; }
if (b==0) { cnt+=1; }
if (c==0) { cnt+=1; }
if (d==0) { cnt+=1; }

if (cnt==3) { // true block } else { //false block } 

上面的代码工作得非常好,但是我在单个if语句中检查了这个条件。然后我试着这样。

if(!((!(a==0) && !(b==0)) &&  (!(c==0) && !(d==0))))
{
   //true block
}
else
{
   //false block
}

上述条件在某些组合中失败(a = 1 b = 0 c = 1 d = 1)。任何人都可以指出问题所在。或提出任何新想法。?

My objective is convert (3 false + 1 true) into true other wise into false.

[注意:我只是出于理解目的而提供的方案。 a,b,c,d值可能不同。看我的目标。不要说有利于1和0的答案]

4 个答案:

答案 0 :(得分:5)

我想我会使用以下方法,这使得算法可重用并支持任意数量的参数。只有当一个参数为真时才返回true。

private boolean oneTrue(boolean... args){
    boolean found = false;

    for (boolean arg : args) {
        if(found && arg){
            return false;
        }
        found |= arg;
    }
    return found;
}

你可以这样测试:

private void test(){

    boolean a = false;
    boolean b = true;
    boolean c = false;
    boolean d = false;

    System.out.println(oneTrue(a,b,c,d));
}

答案 1 :(得分:4)

我建议的最短的纯bool溶液:

System.out.println((a | b) ^ (c | d)) & ((a ^ b) | (c ^ d));

但是在你的程序中已经使用过1和0,如果变量总是1和0,你可能不会使用boolean只需使用以下:

if (a + b + c + d == 1)
{
  // true
} else
{
  // false
}

如果此varibales可能有任何值。在这种情况下,我建议将其转换为1和0而不是布尔值,再次可以简单地计算总和。

答案 2 :(得分:2)

这个怎么样?

    boolean a = true;
    boolean b = false;
    boolean c = false;
    boolean d = false;

    if ((a ? 1 : 0) + (b ? 1 : 0) + (c ? 1 : 0) + (d ? 1 : 0) == 1) {
        System.out.println("You win!");
    }

[edit] ...或者这是另一种方法:

    if ((a ^ b ^ c ^ d) & ((a & b) == (c & d))) {
        System.out.println("**XOR** You win!");
    }

答案 3 :(得分:0)

您可以使用以下表达式:

a && !(b || c || d) ||
b && !(a || c || d) ||
c && !(a || b || d) ||
d && !(a || b || c)