我有以下方法:
public boolean my_method(boolean b1, boolean b2, boolean b3, boolean b4, boolean b5, boolean b6){
// ...
}
我被要求编写代码,以便只有当两个且只有两个参数列表为真时,此方法才返回true。
我不确定这方面的最佳做法。感谢您的建议。
谢谢!
答案 0 :(得分:4)
我一直是流API的粉丝,所以这是一个解决方案:
public boolean method(boolean b1, boolean b2, boolean b3, boolean b4, boolean b5, boolean b6) {
Boolean[] array = { b1, b2, b3, b4, b5, b6 };
return Arrays.stream(array).filter(x -> x).count() == 2;
}
首先,我将所有参数放入一个数组中。然后我过滤了所有真实的项目并计算了它们。最后返回该计数是否等于2.
虽然上面写的代码非常少,但它会将boolean
列入Boolean
s。如果你不喜欢拳击,试试这个:
public boolean method(boolean b1, boolean b2, boolean b3, boolean b4, boolean b5, boolean b6) {
boolean[] array = { b1, b2, b3, b4, b5, b6 };
int count = 0;
for (boolean item: array) {
if (item) {
count++;
}
}
return count == 2;
}
这非常简单,无需解释。
答案 1 :(得分:2)
如何更改实现以便将一组布尔值作为参数?这样,您可以使用相同的方法插入任意数量的布尔值,甚至可以通过添加其他参数来更改所需的真值数量。
boolean my_method(boolean ... values) {
int nTrue = 0;
for (boolean b : values) {
if (b) {
nTrue++;
}
}
if (nTrue == 2)
return true;
return false;
}
答案 2 :(得分:0)
卡亚曼的评论让人思考;我会像Sweeper一样回答,但如果这是一个面试问题,并且你不能使用循环或数组,那么这样的分而治之技术怎么样:
public boolean method(boolean a, boolean b, boolean c, boolean d, boolean e, boolean f) {
if ((a || b || c) && (d || e || f)) {
return true;
} else if ((a || b || c)) {
if (a && b) {
return true;
} else if (b && c) {
return true;
} else if (a && c) {
return true;
}
} else if ((d || e || f)) {
if (d && e) {
return true;
} else if (e && f) {
return true;
} else if (d && f) {
return true;
}
}
return false;
}