简化长条件if语句

时间:2018-11-19 13:49:08

标签: java

我有条件的if语句

if ((a && (b || c)) ||
     (b && (a || c))) {
}

基本上,我想要实现的是,我只能有一个选项为true,但两个选项都不行!

可以简化一下,对我来说看起来多余! 还是应该将其提取为函数?

编辑

if (a && !b && !c) // process a
if (b && !a && !c) // process b
if (c && !a && !b) // process c
if (!a && !b && c!) // none present exception
else {} // more than one case exception

4 个答案:

答案 0 :(得分:5)

是的,它可能更简单,因为a && b会得到与b && a相同的结果,这将绰绰有余:

if (a && b || c) {

}

注意:原始问题完全不同于 ,并要求简化以下表达式:

if ((a && b || c) ||
     (b && a || c)) {
}

答案 1 :(得分:2)

在注释和编辑之后,每一行都是上一行的发展:

(a && (b || c)) || (b && (a || c))
((a && b) || (a && c)) || ((a && b) || (b && c))
(a && b) || (a && c) || (a && b) || (b && c)

您有一个重复项,因此可以将其更改为:(这些行等于)

(a && b) || (a && c) || (b && c)
(a && (b ||c)) || (b&&c)

答案 2 :(得分:1)

MEMOIZE

答案 3 :(得分:0)

if (c || (a && b) {
...
}

两个大条件相同...´&&`是可交换的