sp0*_*00m 6 java boolean count
Boolean a, b, c, d;
Run Code Online (Sandbox Code Playgroud)
我想算一下trues的数量,每个结果都应该有自己的关联动作.也许是这样的:
int result = getResult(a, b, c, d);
switch (result) {
case 0: break;
case 1: break;
case 2: break;
case 3: break;
default: break;
}
Run Code Online (Sandbox Code Playgroud)
任何想法如何以getResult一种漂亮的方式编写方法体?在这个例子中,我只使用了四个,但它应该可以扩展到更多的布尔值.欢迎任何其他方式继续.
Oli*_*rth 12
写一个可变方法?
int getResult(boolean... vars) {
int count = 0;
for (boolean var : vars) {
count += (var ? 1 : 0);
}
return count;
}
Run Code Online (Sandbox Code Playgroud)
一个更好的解决方案可能是使用BitSet,如果你有很多布尔值,它可以更高效esp.
BitSet bs = new BitSet();
bs.set(1);
bs.set(4);
bs.set(9);
bs.set(16);
int setCount = bs.cardinality(); // 4
Run Code Online (Sandbox Code Playgroud)
代替
boolean a, b, c, d;
Run Code Online (Sandbox Code Playgroud)
你有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
Run Code Online (Sandbox Code Playgroud)
如果你有很多布尔值,这个解决方案可以更好地扩展.即每个布尔值使用一位,但每个Boolean都是一个引用,因此使用32位或高达32倍的内存.cardinality()无论您拥有多少位/布尔值,也都会为您实现.