检查true或两者都是false

时间:2013-12-11 02:29:20

标签: java comparison logic

如果我有以下逻辑来检查true或两者都是false但忽略其他,我写道:

if (a) {
  if (b) {
    // do something when both true
  }
} else if (!b) {
  // do something when both false
}

是你用java编写的最简单的吗?

当然我可以写

if (a && b) {
    // do something when both true
} else if (!a && !b) {
  // do something when both false
}

但我在想是否有可能只使用一个if条件而不使用条件来实现这一点,例如。

if (some condition) {
    // do something when both true
} else {  // <-- check! only else, no more condition
  // do something when both false
}

不可能当然是这个问题的可接受的答案(如果附有解释)

谢谢

3 个答案:

答案 0 :(得分:4)

为我最初的XOR答案道歉 - 我误解了你的问题。正确答案是,

  
    

在Java中是不可能的。

  

原因是布尔逻辑之一。如果有两个逻辑A和B,那么有四种可能的状态:

A  B
0  0    << A and B are false
0  1
1  0
1  1    << A and B are true

当你的条件是“A和B都是真的”时,你只有最后一个状态。不幸的是,“else”(所有其他)包含三种可能的状态。你不能拥有一个对一个州来说是真实的东西,对另一个国家来说是假的,对另外两个则是“别的”。这不是布尔代数的工作方式。

答案 1 :(得分:2)

答案是。如果不使用else,则不能在某些条件下运行else if子句。每次else子句中的条件为false时,都会运行不带else if的{​​{1}}子句。如果您想添加其他约束(例如ifa都为false),则需要使用b

使用else if没有任何问题,它使你的意图相当明确:

else if

答案 2 :(得分:1)

您希望以不同的方式处理三种状态 - 尽管有一种情况是“什么也不做”。

if ( a && b )
{
    // Do something when both are true.
}
else if ( ! a && ! b )
{
    // Do something if both are false.
}

这是你想要实现的最经济的方式 - 对三种情况进行两次测试。

或者,如果您可以从“布尔值”或表达式返回0或1,则可以执行以下操作:

switch ( a + b )
{
    case 0:
        // Do something when both a and b are "false."
        break;

    case 1:
        // Do something -- or nothing -- when a or b are "false" and the other is "true."
        break;

    case 2:
        // Do something when both a and b are "true."
        break;
}