2016-12-08 86 views
1

我想將一個小精靈類型(名稱+數字)添加到二叉搜索樹中。這是我的BinarySearchClass。運算符對類類型無效

public void insert(Pokemon n) { // n is data/key 
    Node newNode = new Node(n); 
    if (root == null) { // empty tree 
     root = newNode; 
    } else { 
     Node current = root; 
     Node parent = null; 
     boolean flag = true; 
     while (flag) { 
      parent = current; 
      if (n < current.data) { 
       current = current.left; 
       if (current == null) { 
        parent.left = newNode; 
        flag = false; 
       } 
      } // if(n < current.data) 
      else { 
       current = current.right; 
       if (current == null) { 
        parent.right = newNode; 
        flag = false; 
       } // current == null} 
      } // else} 
     } // while(flag) 
    } // root != null 
} 

我得到的錯誤是在n < current.data。我無法做到這一點,它只是比較口袋妖怪的數量,如Kadabra 64或Bulbsaur 1,但也使用整個口袋妖怪類型。我是否必須在我的口袋妖怪構造函數類中使用getNumber()? 使用此testDriver代碼:

BinarySearchTree T = new BinarySearchTree(); 
    for (int i = 0; i < userNumber; i++){ 
     T.insert(poke[i]); 
    } 
+0

'<'是用於比較數字的運算符。口袋妖怪不是一個數字。也許你想要n.getNumber()

+0

YESS !!非常感謝!那真是愚蠢。 –

+0

這就是爲什麼有意義的變量名稱是個好主意。 'n'傳統上是代數中的一個數值。就個人而言,我會將方法簽名定義爲「公共無效插入(口袋妖怪口袋妖怪)'。 – VGR

回答

1

問題與

n < current.data 

Ñ不是原始類型的變量。它代表一個Pokemon對象。而事情是:Java確實不是支持運算符重載參考類型。

什麼工作:

n.someNumericalField < current.data 

(假設current.data也代表了一些基本類型)

或許

n.lessThan(current.data) 

(其中lessThan()將是一個方法你的在你的口袋妖怪課中實施)

0

您正試圖將Pokemon與數據進行比較。您需要執行以下操作:

//assuming that n.data is an integer or other comparable value 
if (n.data < current.data) 
相關問題