gpt4 book ai didi

java - 在 Java 树结构中存储方程

转载 作者:行者123 更新时间:2023-12-01 13:26:52 25 4
gpt4 key购买 nike

我希望能够在 java 树结构中存储方程/算法,以便我可以轻松检索和操作某些节点。

为了存储方程,我为操作、关系和逻辑操作创建了三个枚举集:

private enum Operation {
PLUS, MINUS, TIMES, DIVIDE, SIN, COS, TAN
}
private enum Relation {
EQUALS, NOT_EQUALS, GREATER_THAN, GREATER_THAN_OR_EQ, LESS_THAN, LESS_THAN_OR_EQ
}
private enum LogicOperation {
AND, OR, TERNARY
}

我想创建一个可以保存任何这些枚举集或任何值的树结构。由于树只是来自根节点的节点网络,因此我创建了一个 Node 类,它可以有一个、两个或三个子节点(一个子节点用于三角运算,两个用于算术运算,三个用于三元逻辑):

public class Node<T> {

private T data;
List<Node<T>> nodeChildren = new ArrayList<Node<T>>();

Node(T data) {
this.data = data;
}

public void addChild(Node<T> child) {
this.nodeChildren.add(child);
}

public void addChildren(Node<T> child1, Node<T> child2) {
this.nodeChildren.add(child1);
this.nodeChildren.add(child2);
}

public void addChildren(Node<T> child1, Node<T> child2, Node<T> child3) {
this.nodeChildren.add(child1);
this.nodeChildren.add(child2);
this.nodeChildren.add(child3);
}

public T getData() {
return this.data;
}

public List<Node<T>> getNodeChildren() {
return this.nodeChildren;
}
}

我不擅长泛型类型,但假设我想存储“5 + 5”,我为“+”创建一个根节点:

Node<Operation> op = new Node(Operation.PLUS);

但是当我尝试添加两个整数类型的子项时,我收到类型不匹配错误:

op.addChildren(new Node<Integer>(5), new Node<Integer>(5));

有人能给我指出正确的方向吗?

谢谢

** 编辑 **

对于任何感兴趣的人来说,答案是使用泛型类型?:

List<Node<?>> nodeChildren = new ArrayList<Node<?>>();

最佳答案

您需要两个类型参数,一个用于操作类型,一个用于子类型。所以你的示例行将显示为:

Node<Operation,Integer> op = new Node<>(Operation.PLUS);

Node 类的声明将开始:

public class Node<T,V> {

private T data;
List<Node<V>> nodeChildren = new ArrayList<Node<V>>();

// ...

public void addChild(Node<V> child) // etc

关于java - 在 Java 树结构中存储方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21769334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com