0

嘿伙计们,我想知道是否有任何方法可以在 java 中返回一堆布尔值的一部分。简单地说,我想知道是否有一种方法可以创建一个方法,当给定四个布尔值时,如果其中三个为真,则返回真,但如果少于三个为真,则返回假。我知道这可能很难理解,如果您不理解,只需发表评论即可。

4

8 回答 8

3

数数数组中的真值...

public boolean checkBools(boolean[] bools){
    int cnt=0;
    for(boolean b : bools)
        if(b) cnt++;
    return cnt < 3 ? false : true;
}
于 2012-05-19T23:16:32.570 回答
2

奇怪的问题......无论如何,这只是 4 个布尔值的可能解决方案:

public boolean booleanFraction(boolean a, boolean b, boolean c, boolean d) {
    int ia = a ? 1 : 0;
    int ib = b ? 1 : 0;
    int ic = c ? 1 : 0;
    int id = d ? 1 : 0;
    return ia + ib + ic + id == 3;
}

对于更通用的解决方案,这里有一个方法,它接收true考虑true整个表达式所需的布尔值数量和大于零的布尔值变量数量作为参数:

public static boolean booleanFraction(int number, boolean... bools) {
    int acc = 0;
    for (boolean b : bools)
        acc += b ? 1 : 0;
    return acc == number;
}

像这样称呼它,例如问题中的示例:

booleanFraction(3, true, true, true, false);
> true

booleanFraction(3, false, false, true, false);
> false
于 2012-05-19T23:19:35.450 回答
2

只需创建一个为每个 true 递增 1 的 int。如果大于或等于 3,则返回 true。话虽如此,我不确定您的卡在哪里,因为这似乎太简陋了,甚至无法提及。

于 2012-05-19T23:12:56.983 回答
1
public boolean checkBooleans(boolean b1, boolean b2, boolean b3, boolean b4) {
    boolean[] array = new boolean[4];
    boolean[0] = b1;
    boolean[1] = b2;
    boolean[2] = b3;
    boolean[3] = b4;
    int j = 0;
    for(int i = 0; i < array.length; i++) {
        if(array[i]) {
            j++;
        }
        if(j == 3) {
            return true;
        }
    }
return false;
}
于 2012-05-19T23:16:45.580 回答
0

使用流:

static boolean threeOrMore(Boolean... bools) {
    return Stream.of(bools).filter(x -> x).count() >= 3;
}
于 2014-05-20T19:52:50.583 回答
0
 boolean nOfM(int n, boolean... m) {
    for (boolean mi : m) if (mi) n--;

    return n < 1;
 }
于 2013-06-28T06:04:38.703 回答
0

如果您希望您的答案作为一种boolean表达方式,您可以尝试,

boolean atLeastThree(boolean a, boolean b, boolean c, boolean d) {
    return a ? (b && (c || d) || (c && d)) : (b && c && d);
}

统计 s的个数true更优雅一点,也更容易理解,

boolean atLeastThree(boolean a, boolean b, boolean c, boolean d) {
    return (a ? 1 : 0) +
           (b ? 1 : 0) + 
           (c ? 1 : 0) + 
           (d ? 1 : 0) > 2;
}
于 2012-05-19T23:21:03.243 回答
0

我对2-out-of-3 问题的答案的变体:

boolean atLeastThree(boolean a, boolean b, boolean c, boolean d)
{
    int  n = -3;

    if (a) n++;
    if (b) n++;
    if (c) n++;
    if (d) n++;

    return (n >= 0);
}
于 2015-03-25T20:09:42.077 回答