如何在java中返回四分之三布尔值的答案

Posted

技术标签:

【中文标题】如何在java中返回四分之三布尔值的答案【英文标题】:How to return answer of three fourths of Booleans in java 【发布时间】:2012-05-27 00:36:30 【问题描述】:

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

【问题讨论】:

实际上,您确实应该首先发布您的问题尝试,以更好地澄清问题并展示您的努力成果。 【参考方案1】:

计算数组中的真值...

public boolean checkBools(boolean[] bools)
    int cnt=0;
    for(boolean b : bools)
        if(b) cnt++;
    return cnt < 3 ? false : true;

【讨论】:

我会使用可变参数。它对用户更友好一点。但是 +1 aioobe,他想知道数组中是否有 3 个或更多 true,因此如果小于 3,则返回 false。如果是 3 个或更多,则返回 true :)【参考方案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

【讨论】:

@HunterMcMillen 这个问题只提到了 4 个布尔值。如果有更多可能,OP 应该指定标准来确定布尔值的哪一部分需要为真才能考虑整个布尔值为真。 @HunterMcMillen 无论如何。我修改了我的答案,现在尽可能通用。【参考方案3】:

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

【讨论】:

【参考方案4】:
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;

【讨论】:

【参考方案5】:

如果你希望你的答案是 boolean 表达式,你可以试试,

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

统计trues的个数更优雅一点,通俗易懂,

boolean atLeastThree(boolean a, boolean b, boolean c, boolean d) 
    return (a ? 1 : 0) +
           (b ? 1 : 0) + 
           (c ? 1 : 0) + 
           (d ? 1 : 0) > 2;

【讨论】:

【参考方案6】:
 boolean nOfM(int n, boolean... m) 
    for (boolean mi : m) if (mi) n--;

    return n < 1;
 

【讨论】:

【参考方案7】:

使用流:

static boolean threeOrMore(Boolean... bools) 
    return Stream.of(bools).filter(x -> x).count() >= 3;

【讨论】:

【参考方案8】:

我对@9​​87654321@ 的回答的一个变体:

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);

【讨论】:

以上是关于如何在java中返回四分之三布尔值的答案的主要内容,如果未能解决你的问题,请参考以下文章

始终返回相同布尔值的 Python 函数

Android studio中如何设置控件水平四分之一为绿色,四分之三为灰色,如下图

画图表示四分之三怎么画

如何在 Python 中获得布尔值的相反(否定)?

一种返回布尔值的方法,该布尔值标识两个数组的值是不是相同

我如何检查字符串是返回布尔值的泰语,如 isalpha()