Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用IF-Else语句将布尔值的四个组合转换为真/假_Java_Algorithm_If Statement_Boolean Operations - Fatal编程技术网

Java 使用IF-Else语句将布尔值的四个组合转换为真/假

Java 使用IF-Else语句将布尔值的四个组合转换为真/假,java,algorithm,if-statement,boolean-operations,Java,Algorithm,If Statement,Boolean Operations,实际上,我尝试将四种不同的布尔值转换为真/假 我的情况是 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

实际上,我尝试将四种不同的布尔值转换为真/假

我的情况是

   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
}
上述条件在某些组合中失败SA=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的答案]

这怎么样

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

    if ((a ? 1 : 0) + (b ? 1 : 0) + (c ? 1 : 0) + (d ? 1 : 0) == 1) {
        System.out.println("You win!");
    }
[编辑]。。。或者这里有另一种方法:

    if ((a ^ b ^ c ^ d) & ((a & b) == (c & d))) {
        System.out.println("**XOR** You win!");
    }
这个怎么样

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

    if ((a ? 1 : 0) + (b ? 1 : 0) + (c ? 1 : 0) + (d ? 1 : 0) == 1) {
        System.out.println("You win!");
    }
[编辑]。。。或者这里有另一种方法:

    if ((a ^ b ^ c ^ d) & ((a & b) == (c & d))) {
        System.out.println("**XOR** You win!");
    }

我想我会使用下面的方法,这使得算法可以重用并支持任意数量的参数。仅当一个参数为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));
}

我想我会使用下面的方法,这使得算法可以重用并支持任意数量的参数。仅当一个参数为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));
}

我可以建议的最短纯布尔解决方案:

System.out.println((a | b) ^ (c | d)) & ((a ^ b) | (c ^ d));
但在您的程序中,已经使用了1和0,如果它的变量始终为1和0,则您可能不会使用布尔值,只需使用以下内容:

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

如果出现这种情况,则varibales可能有任何值。在这种情况下,我建议将其转换为1和0,而不是布尔值,并且再次可以简单地计算总和。

最短纯布尔解,我可以建议:

System.out.println((a | b) ^ (c | d)) & ((a ^ b) | (c ^ d));
但在您的程序中,已经使用了1和0,如果它的变量始终为1和0,则您可能不会使用布尔值,只需使用以下内容:

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

如果出现这种情况,则varibales可能有任何值。在这种情况下,我建议将其转换为1和0,而不是布尔值,并且可以再次简单地计算总和。

您可以使用以下表达式:

a && !(b || c || d) ||
b && !(a || c || d) ||
c && !(a || b || d) ||
d && !(a || b || c)

可以使用以下表达式:

a && !(b || c || d) ||
b && !(a || c || d) ||
c && !(a || b || d) ||
d && !(a || b || c)


为什么不求a+b+c+d之和,看看等于1false与Java中的0是否不同。你有什么?0、1或真、假?@Maroun如果使用多个变量,则这也是真的true@MarounMaroun. 即使对于1个假值,这也是真的。这不是OP想要的。@Dukeling但他想在多个值为0时将其解析为false。为什么不求a+b+c+d之和,看看等于1false在Java中是否与0不同。你有什么?0、1或真、假?@Maroun如果使用多个变量,则这也是真的true@MarounMaroun. 即使对于1个假值,这也是真的。这不是OP想要的。@Dukeling但他希望当多个值为0时,将其解析为false。这似乎是一个很好的答案。等一下,我查一下,然后回来找你。。!!a&b^c&d可以转换为a&b==c&d,这是一个很好的答案。等一下,我查一下,然后回来找你。。!!a&b^c&d可以转换为a&b==c&d非常好!我喜欢你让它对任何数量的参数都有用,而且代码比一个带有一堆或| | |或&&的大型if语句更清晰。你知道,我刚刚从你那里学到了一个新概念。顺便说一句,我想投票支持你的答案。+1这比其他答案更具可读性和灵活性。非常好!我喜欢你让它对任何数量的参数都有用,而且代码比一个带有一堆或| | |或&&的大型if语句更清晰。你知道,我刚刚从你那里学到了一个新概念。顺便说一句,我想投票支持你的答案。+1这比其他答案更具可读性和灵活性。