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

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

【问题讨论】:

  • 实际上,您确实应该首先发布您的问题尝试,以更好地澄清问题并展示您的努力成果。

标签: java boolean boolean-logic fractions


【解决方案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);
            }
            

            【讨论】:

              猜你喜欢
              • 2013-03-28
              • 2018-10-08
              • 2021-02-12
              • 2015-02-14
              • 2021-04-04
              • 2011-11-20
              • 2015-01-04
              • 2016-09-03
              • 1970-01-01
              相关资源
              最近更新 更多