1

実際に、4 つの異なるブール値を true/false に変換してみます。

私の場合は、

   True false false false Then true else false
   false True false false Then true else false
   false false True false Then true else false
   false false false True Then true else false

このようにしてみましたが、

int a=1;
int b=0;
int c=0;
int d=0;

int cnt=0;

// A block of code will be executed only when any one of the four variables is 1 and
//the rest of them is 0. and another block will be executed when the above mentioned
//condition become false.

if (a==0) { cnt+=1; }
if (b==0) { cnt+=1; }
if (c==0) { cnt+=1; }
if (d==0) { cnt+=1; }

if (cnt==3) { // true block } else { //false block } 

上記のコードは完全に正常に動作していますが、単一の if ステートメントでこの条件をチェックすることに挑戦しました。それから私はこのようにしてみました。

if(!((!(a==0) && !(b==0)) &&  (!(c==0) && !(d==0))))
{
   //true block
}
else
{
   //false block
}

上記の条件は、いくつかの組み合わせ (a=1 b=0 c=1 d=1) で失敗しています。誰が問題が何であるかを指摘できますか? または新しいアイデアを提案します。

My objective is convert (3 false + 1 true) into true other wise into false.

[注:理解を目的としてシナリオを示しただけです。a,b,c,dの値は異なる場合があります。私の目的を参照してください。1と0を支持する答えを言わないでください]

4

4 に答える 4

5

次の方法を使用すると思います。これにより、アルゴリズムが再利用可能になり、任意の数の引数がサポートされます。ちょうど 1 つの引数が true である場合にのみ、true を返します。

private boolean oneTrue(boolean... args){
    boolean found = false;

    for (boolean arg : args) {
        if(found && arg){
            return false;
        }
        found |= arg;
    }
    return found;
}

次のようにテストできます。

private void test(){

    boolean a = false;
    boolean b = true;
    boolean c = false;
    boolean d = false;

    System.out.println(oneTrue(a,b,c,d));
}
于 2013-08-28T07:09:25.107 に答える
4

私が提案できる最短の純粋なブールソリューション:

System.out.println((a | b) ^ (c | d)) & ((a ^ b) | (c ^ d));

しかし、すでに 1 と 0 を使用しているプログラムでは、変数が常に 1 と 0 である場合、次のようにブール値を使用することはできません。

if (a + b + c + d == 1)
{
  // true
} else
{
  // false
}

この変数が任意の値を持つ可能性がある場合。この場合、ブール値ではなく 1 と 0 に変換することをお勧めします。これにより、単純に合計を計算できます。

于 2013-08-28T07:22:42.053 に答える
0

次の式を使用できます。

a && !(b || c || d) ||
b && !(a || c || d) ||
c && !(a || b || d) ||
d && !(a || b || c)
于 2013-08-28T07:45:46.260 に答える