2014-06-21 96 views
0

首次發佈。無法找到答案,所以在這裏:在原始類型上使用可比較的

介紹:這是我家庭作業的一部分。分配是在整數二進制樹上工作。前三個步驟是關於編程十幾種方法來操縱和玩弄樹,如添加新節點,計算,遍歷,求和等。第四部分需要創建僅用於字符串的完全相同的類,其中值將使用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才能使這個二叉樹起作用?

+1

爲什麼'insert'的參數'n'是原始的?參數化。 –

+0

這個API看起來很不尋常。你正在返回你插入的節點?你還迫使調用者傳入一個'Node'?爲什麼不只是傳遞價值呢? – Makoto

回答

1

似乎,它是作爲參數化簡單的Node傳入。

public Node<T> insert(Node<T> n, T v) 

到另一種解決辦法是有Node本身實現Comparable

public class Node<T extends Comparable<T>> implements Comparable<Node<T>> { 
    // ... 
} 
+0

確實改成'公共節點插入(節點n,Tv)'工作。謝謝。在Tree.java中實現它也有效。 – Flo