首次發佈。無法找到答案,所以在這裏:在原始類型上使用可比較的
介紹:這是我家庭作業的一部分。分配是在整數二進制樹上工作。前三個步驟是關於編程十幾種方法來操縱和玩弄樹,如添加新節點,計算,遍歷,求和等。第四部分需要創建僅用於字符串的完全相同的類,其中值將使用compareTo方法進行比較。
問題:賦值的下一步需要使用多態性來允許節點接受int或string。由於我在最後一次演講中只簡單地介紹了這一點,因此我發現自己在過去的幾個小時內停滯不前,找不到解決方案。
代碼:
public class Node<T extends Comparable<T>> {
T val;
Node<T> left, right;
public Node(T val) {
this.val = val;
this.left = null;
this.right = null;
}
public Node<T> insert(Node n, T v) {
if (n == null) {
return new Node(v);
}
if (v.compareTo(n.val) == 0) {
return n;
}
if (v.compareTo(n.val) < 0) {
n.left = insert(n.left, v);
} else {
n.right = insert(n.right, v);
}
return n;
}
...
}
問題是在原始類型的使用compareTo()
。我無法找到任何地方如何比較兩個對象/原始類型。我嘗試了許多變化,通常都有類似的結果。調試器不斷提醒我「不兼容的類型:Comparable不能轉換爲T」。我到底該如何實現Comparable才能使這個二叉樹起作用?
爲什麼'insert'的參數'n'是原始的?參數化。 –
這個API看起來很不尋常。你正在返回你插入的節點?你還迫使調用者傳入一個'Node'?爲什麼不只是傳遞價值呢? – Makoto