使用6个输入布尔参数检查方法的参数

时间:2016-12-12 19:12:16

标签: java

我有以下方法:

public boolean my_method(boolean b1, boolean b2, boolean b3, boolean b4, boolean b5, boolean b6){ 
// ... 
}

我被要求编写代码,以便只有当两个且只有两个参数列表为真时,此方法才返回true。

我不确定这方面的最佳做法。感谢您的建议。

谢谢!

3 个答案:

答案 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;
 }