[英]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.