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

boolean logic - comparing three booleans

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

编写一个静态方法 odd() 接受三个布尔输入,returns 如果奇数个输入为真则为真,否则为假。

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;
    }

我建议你这样做

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;

一行完成的功能:

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;
 }
public boolean odd(boolean a, boolean b, boolean c) {
    return a ^ b ^ c;  
}

XOR 也称为奇数函数,这意味着如果奇数个输入为 true.

,它将 return true