2016-06-20 3 views
2

Как я могу выполнить тест без ошибок?Java - Узел двоичного поиска Как проверить объект?

Из-за этого объекта нельзя использовать в этом операторе?

У меня есть ошибка (в функции вставки) почему?

Ошибка:

< Оператор не определен для типа аргумента (ов) java.lang.Object, java.lang.Object

public class BinarySearchNode { 
protected Object data; 

protected BinarySearchNode left; 
protected BinarySearchNode right; 

public BinarySearchNode(Object data) { 
    if (data == null) 
     throw new RuntimeException("we are too lazy to deal with null data"); 

    this.data = data; 
    this.left = null; 
    this.right = null; 
} 

public void insert(Object toAdd) { 
    if **(toAdd < data)** { <<<<<<<<<<<<<<<<<<< here 
     if (left == null) 
      left = new BinarySearchNode(toAdd); 
     else 
      left.insert(toAdd); 
    } else { 
     if (right == null) 
      right = new BinarySearchNode(toAdd); 
     else 
      right.insert(toAdd); 

    } 
} 

public void InOrderPrint() { 
    if (left != null) 
     left.InOrderPrint(); 

    System.out.println(this.data); 

    if (right != null) 
     right.InOrderPrint(); 

} 
} 

ответ

1

У вас есть два подхода к установлению порядка Object s:

  • Replace Object с Comparable<T> - это позволит вам поставить комп arison logic в самом объекте, или
  • Попросите абонента предоставить реализацию Comparator<T> - это позволит вашим абонентам напрямую использовать логику при использовании ваших API.

Вот как вы будете использовать первый подход:

public class BinarySearchNode<T extends Comparable<T>> { 
    protected T data; 
    ... 
    public void insert(T toAdd) { 
     if (toAdd.compareTo(data) < 0) { 
      ... 
     } else { 
      ... 
     } 
    } 
} 
0

Оператор < (менее) является relational operator и он работает только с числовыми значениями. Он может работать с объектами, полученными от java.lang.Number, но прежде чем выполнять сравнение, компилятор «делает» операцию automatic unboxing.

Смежные вопросы