布尔逻辑 - 比较三个布尔值

时间:2015-02-22 22:44:25

标签: java boolean

我正在尝试构建一个方法来回答以下问题。但是我遇到了一些麻烦。有人可以帮我解释这个逻辑吗?

写一个静态方法odd(),它接受三个布尔输入,如果奇数个输入为真,则返回true,否则返回false。

public boolean odd(boolean a, boolean b, boolean c)
    {   
        if((a && b) && (b && c) && (a && c))
            return true;
        if((a && b) && (b && c) || (a && b) && (a && c))
            return false;
         return false;
    }

3 个答案:

答案 0 :(得分:5)

public boolean odd(boolean a, boolean b, boolean c) {
    return a ^ b ^ c;  
}

XOR也称为奇数函数,这意味着如果奇数个输入为true,它将返回true

答案 1 :(得分:0)

我建议你做点什么

public boolean odd(boolean a, boolean b, boolean c) {
    int count = 0;
    if (a) count++;
    if (b) count++;
    if (c) count++;
    return count % 2 != 0;   
}

如果你真的想要优化它,我想你想要像

这样的东西
if (a || b || c) {
    if (a && b && c) return true;
    if (a) return !(b && c);
    if (b) return !c;
    return c;
}
return false;

答案 2 :(得分:0)

该功能可以在一行中完成:

return (a&&b&&c) || (a && !b && !c ) || (!a && b && !c ) || (!a && !b && c );

如果您需要使用三个以上的输入,我建议将ArrayList发送到函数

 odd(ArrayList<Boolean> list)
 {
      int count = 0;
      for(Boolean b : list)
      {
           if(b.booleanValue()) count++;
      }
      return (count%2) == 1;
 }