首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java树结构中存储公式

在Java树结构中存储公式
EN

Stack Overflow用户
提问于 2014-02-14 09:46:33
回答 1查看 706关注 0票数 0

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

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

代码语言:javascript
复制
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类,它可以有一个、两个或三个子节点(一个子节点用于触发器操作,两个子节点用于算术操作,三个子节点用于三值逻辑):

代码语言:javascript
复制
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',我为‘+’创建了一个根节点:

代码语言:javascript
复制
Node<Operation> op = new Node(Operation.PLUS);

但是当我尝试添加两个整型的子级时,我得到了一个类型不匹配的错误:

代码语言:javascript
复制
op.addChildren(new Node<Integer>(5), new Node<Integer>(5));

有没有人能给我指个方向?

谢谢

**编辑**

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

代码语言:javascript
复制
List<Node<?>> nodeChildren = new ArrayList<Node<?>>();
EN

回答 1

Stack Overflow用户

发布于 2014-02-14 09:51:15

您需要两个类型参数,一个用于操作类型,另一个用于子类型。因此,您的样本行应为:

代码语言:javascript
复制
Node<Operation,Integer> op = new Node<>(Operation.PLUS);

并且Node类的声明将开始:

代码语言:javascript
复制
public class Node<T,V> {

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

    // ...

    public void addChild(Node<V> child) // etc
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21769334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档