E.g.,
if (bool1 ^ bool2 ^ bool3 ^ bool4)
{
// Do whatever
}
It should execute only if exactly one of the conditions is met.
E.g.,
if (bool1 ^ bool2 ^ bool3 ^ bool4)
{
// Do whatever
}
It should execute only if exactly one of the conditions is met.
Add the bools together as integers and check if they equal 1.
In a language where casting from a boolean to an integer doesn't work, such as Java, the more long winded option is:
if ((bool1 ? 1 : 0) + (bool2 ? 1 : 0) + (bool3 ? 1 : 0) + (bool4 ? 1 : 0) == 1) {
// only runs when one of bool 1-4 is true
}
However, in other languages where casting a boolean to an integer is valid, you can do the following:
if ((int)(bool1) + (int)(bool2) + (int)(bool3) + (int)(bool4) == 1) {
// only runs when one of bool 1-4 is true
}
As an alternative, here is a stream-based solution:
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);
It has the advantage that it can easily be applied to 3 or 5 boolean values, or to generically implement a boolean exactlyOne(boolean ... b)
method.
Your expression won't work because it means
(((bool1 ^ bool2) ^ bool3) ^ bool4)
Suppose bool1 = bool2 = bool3 = true
and bool4 = false
. Overal expression will give true
.
You probably meant some XOR generalization, but there are several of them. One may work as you said, but more often it means odd number of ones. Anyway, most programming languages do not have it out of the box.