如何将可能包含或不包含括号的逻辑表达式表示为 Java 中的对象? 我希望能够计算从 A 到 A AND B 或更复杂的表达式,如 A AND (B OR (C AND D AND E)) 我尝试表示为以下对象:
public class Condition {
private boolean checked;
private String operator; // AND, OR, or NESTED
private List<Condition> nestedExpressions; // For nested expressions
}
并尝试使用 Condition 对象列表,递归地迭代此列表,但如果我设置一个运算符 NESTED,我无法在其后添加任何内容,因为它不起作用。
有没有更好的方法在java中表示逻辑表达式?或者有什么图书馆可以帮助我吗?
public class Condition {
private boolean checked;
private String operator; // AND, OR
}
/\ 此代码适用于简单的、无括号的表达式,例如:A AND B OR C,但我想处理更复杂的结构。
通常,条件将由
Condition
接口定义,其中包含您希望能够使用条件执行的操作的方法,例如 evaluate
它。 然后你就有了实现不同运算符的子类。
将条件建模为data在 Java 中有点尴尬,但条件足够简单,您可以使其工作。 如果我必须这样做,我可能会尝试这样的事情:
enum ConditionOperator { AND, OR };
public class Condition {
public ConditionOperator operator;
public List<Condition> conditions;
public List<String> trueLiterals;
public List<String> falseLiterals;
}
关于此表示的一些注释:
trueLiterals
和 falseLiterals
之间移动它们。列表。 要否定整个条件,请应用德摩根定理