Boolean a, b, c, d;
我想算一下trues的数量,每个结果都应该有自己的关联动作。也许是这样的:
int result = getResult(a, b, c, d);
switch (result) {
case 0: break;
case 1: break;
case 2: break;
case 3: break;
default: break;
}
如何以一种漂亮的方式编写getResult
方法体?在这个例子中,我只使用 四,但它应该可以扩展到更多的布尔值。欢迎任何其他方式继续。
答案 0 :(得分:12)
写一个可变方法?
int getResult(boolean... vars) {
int count = 0;
for (boolean var : vars) {
count += (var ? 1 : 0);
}
return count;
}
答案 1 :(得分:7)
更好的解决方案可能是使用BitSet,如果你有很多布尔值,它可以更高效esp。
BitSet bs = new BitSet();
bs.set(1);
bs.set(4);
bs.set(9);
bs.set(16);
int setCount = bs.cardinality(); // 4
而不是
boolean a, b, c, d;
你有BitSet,它可以有数百或数百个布尔值。
BitSet bs = new BitSet(4);
bs.set(0); // a
bs.set(1); // b
bs.set(2); // c
bs.set(3); // d
int setCount = bs.cardinality(); // 4
如果你有很多布尔值,这个解决方案可以更好地扩展。即每个布尔值使用一位,但每个Boolean
是一个引用,因此使用32位或高达32倍的内存。无论你有多少比特/布尔值,你都会实现cardinality()
。