我的代码中有这个if-condition

if (a||a&&!b){
// do some stuff
}


来自我的junit test的初始值:

boolean a=true, b = true;


正如我稍后认识到的,该语句可以简化为:

if (a&&b)


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

我的问题是现在。是否有任何方法,工具,函数,库等来检查boolean expression是否存在简化?

谢谢你的帮助?

最佳答案

a || a && !b


不等于

a && b


它等于a

我想在JUnit测试中,您为ab的值使用了特定的值组合,结果匹配,但这并不意味着这些表达式是等效的,但实际上并不相同。一种说服自己的快速方法是检查组合

a = true, b = false;


在所有true情况下,原始表达式显然会产生a == true,但是在false时,第二个表达式将产生b == false

至于等价于a的形式证明,请展开

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


插入您的原始表达式:

a || a && !b == a && b || a && !b || a && !b
             == a && b || a && !b
             == a

关于java - 简化条件 boolean 表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22199180/

10-12 16:12
查看更多