2016-08-15 5 views
0

私はジェネリックで(メソッドを追加)binarysearchtreeを実装しようとしたが、それは私にこの種のエラーを与える:怒鳴るオペランドのタイプのエラー

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 

コード:

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; 
    } 
} 

私は問題が交換ということだと思いましたTオブジェクトはどんなタイプでもそれを比較することができませんでしたが、私はComparableでクラスを拡張しましたが、それを修正しませんでした。

何が問題の原因となりますか?どのように修正しますか?

答えて

2

>演算子は、いずれのオブジェクトオペランドにも、Comparableを実装していても使用できません。数値オペランドにのみ適用できます。

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

if (value < prev.m_Value) 

を交換知りませんでした。問題を解決したasnwerありがとうございました。 – kvway

関連する問題