如果我有以下逻辑来检查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
}
不可能当然是这个问题的可接受的答案(如果附有解释)
谢谢
答案 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}}子句。如果您想添加其他约束(例如if
和a
都为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;
}