如果条件布尔表达式,则简化

Ste*_*ike 2 java boolean-logic if-statement boolean-expression

if-condition我的代码中有这个:

if (a||a&&!b){
// do some stuff
}
Run Code Online (Sandbox Code Playgroud)

从我的那些初始值junit test:

boolean a=true, b = true;
Run Code Online (Sandbox Code Playgroud)

我后来认识到这个陈述可以简化为:

if (a&&b)
Run Code Online (Sandbox Code Playgroud)

变绿了: Assert.assertTrue(a||a&&!b == a&&b);

我现在的问题.有没有方法,工具,功能,图书馆等来检查boolean expression是否有简化?

谢谢你的帮助?

Dmi*_*nko 7

只需查看真值表(我已添加括号)

  a || (a && (!b))

  a|b|result
  ----------
  T|T|T 
  T|F|T 
  F|T|F 
  F|F|F
Run Code Online (Sandbox Code Playgroud)

我们可以看到,该公式不依赖b,并且可以简化为仅

  a
Run Code Online (Sandbox Code Playgroud)

最后

  if (a) {
    // do some stuff
  }
Run Code Online (Sandbox Code Playgroud)

对于具有许多变量的公式,当真值表太长而无法进行人工分析时,您可以使用卡诺图,如Eomm所提出的那样.