2016-12-08 2 views
1

Я хочу добавить тип pokemon (имя + номер) в двоичное дерево поиска. Вот мой 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 
} 

Ошибки я получаю в п < current.data. Я не могу это сделать, поэтому он просто сравнивает количество Pokemon, таких как Kadabra 64 или Bulbsaur 1, но также использует весь тип Pokemon. Должен ли я использовать getNumber() в классе конструктора Pokemon? Используя этот 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 

что п не примитивный тип переменной. Он представляет объект Pokemon. И дело в том, что Java делает не поддерживает перегрузку оператора для ссылочных типов.

Что бы работать:

n.someNumericalField < current.data 

(при условии, что current.data также представляют некоторый примитивный тип)

Или, может быть,

n.lessThan(current.data) 

(где lessThan() бы метод, который вы в вашем классе Pokemon)

0

Вы пытаетесь сравнить Pokemon с данными. Вам необходимо сделать что-то вроде:

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