Java 长条件if句的简化

Java 长条件if句的简化,java,Java,我有这样一个条件if语句 if ((a && (b || c)) || (b && (a || c))) { } if ((a && b || c) || (b && a || c)) { } 基本上,我试图实现的是,我只能有一个选项是真的,但两个是不好的 能不能简化一点,对我来说是多余的! 还是应该将其提取到函数中 编辑 是的,它可以更简单,这就足够了,因为a&&b将给出与b&&a相同的结果: 注:原问题完

我有这样一个条件if语句

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

基本上,我试图实现的是,我只能有一个选项是真的,但两个是不好的

能不能简化一点,对我来说是多余的! 还是应该将其提取到函数中

编辑


是的,它可以更简单,这就足够了,因为a&&b将给出与b&&a相同的结果:

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


这两个大条件是相同的。。。'&&`是可交换的

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

&& operator is Commutative so a && b or b && a results in same output.

Now your condition becomes like this
if ((a && b || c) ||
     (a && b || c)) {
}

|| operator is Idempotent so x || x results x

your expression becomes (a && b) || c

But in java && and || operators exhibit "short-circuiting" behavior

First operand will be evaluated first and then second operand will be evaluated only if need so you can choose which operand to keep first based on operand complexity.
(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)

写一张真理表!说你不能有任何两个选择的部分是真的,这一点很不清楚。如果cis为true,则a&&b||c和b&&a|c都将被计算为true。如下面的评论所述:您的要求与您发布的表达式不匹配。实际上a&&b与b&&a并不完全相同,因为运算符是短路操作-如果a和b是方法,则只能执行一个。如果这有关系的话,它可能是一种代码味道:您的案例没有处理一个错误。您应该解释这种行为是由于&&运算符是可交换的。基本上,我试图实现的是,我不能有任何两个选项为真,但有一个是可以的@JonB你可能想在你的问题中解释一下。但是,请注意,您的要求与您发布的表达式不匹配a&&b将要求两者都为真。如果a为假,c和b为真,您的案例将无法处理此问题@JonB不是说答案不能处理这个或那个案例,你能解释一下你想做什么吗?因为现在还不清楚,人们只是在猜测误解,如果a&b|c | c | b&a | c{}不允许有两个是真的,这就是我试图简化的。希望这能澄清这一点,再次为这个措辞糟糕的问题感到抱歉。抱歉,如果代码不清楚,那么应该这样读,如果a&&b|c|b&&a|c不允许有两个是真的。这看起来像是最少的字母a&&b|c|b&&c,并且也是解释性的,谢谢!我认为最好把它留在这个状态:a和b | a和c | b和c,而不是a和b | c | b和c
&& operator is Commutative so a && b or b && a results in same output.

Now your condition becomes like this
if ((a && b || c) ||
     (a && b || c)) {
}

|| operator is Idempotent so x || x results x

your expression becomes (a && b) || c

But in java && and || operators exhibit "short-circuiting" behavior

First operand will be evaluated first and then second operand will be evaluated only if need so you can choose which operand to keep first based on operand complexity.
(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)