簡體   English   中英

在Java樹結構中存儲方程式

[英]Storing Equations in a Java Tree Structure

我希望能夠在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,它可以具有一個,兩個或三個子級(一個子級用於trig運算,兩個子級用於算術運算,三個子級用於三元邏輯):

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM