0

やあみんな私はJavaでブール値の束の特定の部分を返す方法があるかどうか疑問に思っていました。簡単に言えば、4つのブール値が与えられたときに3つがtrueの場合はtrueを返し、3つ未満の場合はfalseを返すメソッドを作成する方法があるかどうかを調べたいと思います。これは理解しにくいかもしれませんが、理解できない場合は、そのようにコメントを投稿してください。

4

8 に答える 8

3

配列内のtrueを数えます...

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

答えを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
 boolean nOfM(int n, boolean... m) {
    for (boolean mi : m) if (mi) n--;

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

ストリームの使用:

static boolean threeOrMore(Boolean... bools) {
    return Stream.of(bools).filter(x -> x).count() >= 3;
}
于 2014-05-20T19:52:50.583 に答える
0

2 of3問題に対する私の答えのバリエーション:

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 に答える