如,
if (bool1 ^ bool2 ^ bool3 ^ bool4)
{
// Do whatever
}
只有在满足其中一个条件时才应执行。
答案 0 :(得分:8)
将bool作为整数加在一起,检查它们是否等于1。
在从布尔到整数的转换不起作用的语言中,例如Java,更长的winded选项是:
if ((bool1 ? 1 : 0) + (bool2 ? 1 : 0) + (bool3 ? 1 : 0) + (bool4 ? 1 : 0) == 1) {
// only runs when one of bool 1-4 is true
}
但是,在将布尔值转换为整数的其他语言中,您可以执行以下操作:
if ((int)(bool1) + (int)(bool2) + (int)(bool3) + (int)(bool4) == 1) {
// only runs when one of bool 1-4 is true
}
答案 1 :(得分:2)
作为替代方案,这是一个基于流的解决方案:
boolean b0 = false;
boolean b1 = false;
boolean b2 = true;
boolean b3 = false;
boolean result = Stream.of(b0, b1, b2, b3)
.mapToInt(b -> b ? 1 : 0)
.sum() == 1;
System.out.println(result);
它的优点是可以很容易地应用于3或5个布尔值,或者通常实现布尔exactlyOne(boolean ... b)
方法。
答案 2 :(得分:0)
你的表达不起作用,因为它意味着
IntPtr currentSession = SessionInfoPtr;
假设(((bool1 ^ bool2) ^ bool3) ^ bool4)
和bool1 = bool2 = bool3 = true
。总体表达式将给出bool4 = false
。
你可能意味着一些XOR泛化,但有几个。一个可能像你说的那样工作,但更多时候它意味着奇数个。无论如何,大多数编程语言没有开箱即用。