2016-08-15 4 views
0

Ich versuchte binarysearchtree (Add-Methode) mit Generika zu implementieren, aber es gibt mir diese Art von Fehler:Operand Typen Fehler

genericstree.java:36: error: bad operand types for binary operator '>' 
      if (value > iterator.m_Value) 
        ^
    first type: T 
    second type: T 
    where T is a type-variable: 
    T extends Comparable<T> declared in class BinarySearchTree 
genericstree.java:42: error: bad operand types for binary operator '<' 
     if (value < prev.m_Value) 
       ^
    first type: T 
    second type: T 
    where T is a type-variable: 
    T extends Comparable<T> declared in class BinarySearchTree 
2 errors 

-Code unten:

class BinarySearchTree<T extends Comparable<T>> 
{ 
    class Node<T extends Comparable<T>> 
    { 
     Node<T> left; 
     Node<T> right; 
     T  m_Value; 

     Node(T value) 
     { 
      left = null; 
      right = null; 
      m_Value = value; 
     } 
    } 

    Node<T> m_Root; 

    BinarySearchTree() { m_Root = null; } 
    void addNode(T value) 
    { 
     Node<T> tmp = new Node<T>(value); 
     if (m_Root == null) 
     { 
      tmp.m_Value = value; 
      m_Root = tmp; 
      return; 
     } 

     Node<T> iterator = m_Root; 
     Node<T> prev = m_Root; 
     while (iterator != null) 
     { 
      prev = iterator; 
      if (value > iterator.m_Value) 
       iterator = iterator.right; 
      else 
       iterator = iterator.left; 
     } 

     if (value < prev.m_Value) 
      prev.left = tmp; 
     else 
      prev.right = tmp; 
    } 
} 

ich das Problem, dachte, dass ersetzt wurde T-Objekt könnte von jedem Typ, dann könnte es nicht vergleichen, aber ich habe die Klasse mit Comparable erweitert, aber es hat es nicht behoben.

Was verursacht das Problem und wie behebe ich es?

Antwort

2

Sie können die Operatoren < und > nicht für alle Objektoperanden verwenden, auch wenn sie Comparable implementieren. Sie können sie nur auf numerische Operanden anwenden.

if (value < prev.m_Value) 

mit

if (value.compareTo(prev.m_Value) < 0) 
+0

Wusste nicht ersetzen. Danke für die Antwort, die das Problem behoben hat. – kvway

Verwandte Themen