2016-12-08 8 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'は伝統的に代数では数値です。個人的には、メソッドシグネチャを 'public void insert(Pokemon pokemon)'と定義しました。 – VGR

答えて

1

n < current.data 

に伴う問題は、Nがプリミティブ型の変数ではないということです。これはPokemonオブジェクトを表します。そして、事は:Javaはではありません。は、参照型のオペレータオーバーロードをサポートしています。仕事とは何

n.someNumericalField < current.data 

(そのcurrent.dataと仮定すると、いくつかのプリミティブ型を表すことになり)

それともlessThan()方法だろう

n.lessThan(current.data) 

(あなたはポケモンクラス内にを実装しています)

0

Pokemonとデータを比較しようとしています。

//assuming that n.data is an integer or other comparable value 
if (n.data < current.data) 
関連する問題