我需要存储这样的布尔表达式:
x1 AND x2 AND x3 OR (x4 AND x5) AND (NOT x6)
每个x
变量都是一个布尔表达式,如=
或!=
的值。问题是存储嵌套的AND
和OR
子句(在它们内部和/或彼此内部),并用not
包装它们。包裹深度可以很深。
Java SDK是否具有这些表达式的数据结构?
abstract class Predicate {...}
class AndPredicate extends Predicate {
private Predicate[] conjuncts;
...
}
class OrPredicate extends Predicate {
private Predicate[] disjuncts;
...
}
class NotPredicate extends Predicate {
Predicate negated;
...
}
有什么问题?
你可以试着用jexl(http://commons.apache.org/jexl/)
JexlEngine jexl = new JexlEngine();
jexl.setSilent(true);
jexl.setLenient(true);
Expression expression = jexl.createExpression("(a || b && (c && d))");
JexlContext jexlContext = new MapContext();
//b and c and d should pass
jexlContext.set("b",true);
jexlContext.set("c",true);
jexlContext.set("d",true);
assertTrue((Boolean)expression.evaluate(jexlContext));
jexlContext = new MapContext();
//b and c and NOT d should be false
jexlContext.set("b",true);
jexlContext.set("c",true);
//note this works without setting d to false on the context
//because null evaluates to false
assertFalse((Boolean)expression.evaluate(jexlContext));
这个问题的例子
PS:它不包括在标准的sdk,但很容易使用。
在Java8功能接口谓词
这是Java文档。
这里有各种各样的例子。
因此,在您的用例中,它将是以下内容:
public static Predicate<Integer> equals(Integer compare) {
return i -> i.equals(compare);
}
public static Predicate<Integer> complex() {
return equals(1).and(equals(2)).and(equals(3)).or(equals(4).and(equals(5))).and(equals(6).negate());
}
记住-只Java8岁以上!
3.7 Python 布尔表达式用作控制结构* 有了顺序、分支和循环控制结构,原则上已足以表达所有算法。然而,为了在解决某些问题时编程更加方便,各种语言还提供了若干其他控制结构。本节介绍 Python 的一个特色, 即布尔表达式可当作控制结构来用。 编程语言中的表达式本来只是用来产生值的,布尔表达式也不例外。布尔表达式的常规 用法是计算产生 True 或 False,并用在分支和循环控制结构当中。
问题内容: 由于MySQL似乎没有任何“布尔”数据类型,因此您“滥用”哪种数据类型在MySQL中存储正确/错误信息? 尤其是在从PHP脚本进行读写的情况下。 随着时间的流逝,我已经使用并看到了几种方法: tinyint,包含值0/1的varchar字段, 包含字符串‘0’/‘1’或’true’/’false’的varchar字段 最后枚举包含两个选项“ true” /“ false”的字段。 以上
我开始学习布尔表达式。我正试图找出以下问题: 假设age1、age2和age3是int变量,假设答案是布尔变量。编写一个表达式,当age1小于或等于age2并且age2小于或等于age3时,该表达式将答案指定为true。否则答案应为false。 我已经尝试了一些东西,但对Java来说还是比较陌生的。我能把答案打印出来,但我的数字还是有问题。 这是错误的: 我只是不知道如何解决这个问题,或者代码中到
我有两个实体:类别和具有一对多关系的产品。 如果价格大于100,我如何按产品数量订购类别?类似(这不起作用):
问题内容: 所以我有一个关于考试作业的问题,在这个作业中,我们有一堆布尔表达式,例如: 然后,我们应该编写布尔表达式的值。为此,我使用了三值逻辑,但是当您获得如下所示的布尔表达式时,这将如何应用: 或者 通过三值逻辑可以很容易地找到第一个,但是我如何找出另外两个。 我知道这是一个非常基本的问题,但是我对此仍然是陌生的。 提前致谢 问题答案: 您需要布尔值和的三相真值表: 该表是缩写,依赖于布尔逻辑
我正在寻找一个易于计算的字符串,作为包含双精度和布尔值的布尔表达式。 我已经看过javaluator了,但我不确定它是否在一个表达式中支持多种数据类型,比如double和boolean?! 最大的挑战是,变量值不是存储在变量“exposeOk”中,而是存储在包含字符串-值对的对象列表中。因此,如果计算器需要exposeOk的值,它必须在列表中搜索包含字符串“exposeOk”的对象,并且必须使用存