我正在尝试构建一个方法来回答以下问题。但是我遇到了一些麻烦。有人可以帮我解释这个逻辑吗?
写一个静态方法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;
}
答案 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;
}