您如何将 object 与可比对象进行比较?

how do you compare an object with a comparable?

我有一个 class 任务,我需要将一个目标排序到二叉树节点中,给定一个根,我需要将它与根进行比较,并将目标作为左 child 如果目标小于根的值,或者如果目标大于根的值,则将目标作为右 child。

我必须使用给定的方法 header 和参数,我的代码是这样写的:

   public static boolean find(TreeNode t, Comparable x)
   {
      TreeNode p = t;
      if(t == null)
         return false;
      while(p != null)
      {
         if(p.getValue() == x)
            return true;
         else if(p.getValue() < x)
            p = p.getLeft();
         else
            p = p.getRight();
      }
      return false;
   }

哪个returns这个错误:

BinarySearchTree.java:109: error: bad operand types for binary operator '<'

我也尝试了 compareTo 方法,尝试了

if(p.getValue().compareTo(x) == 0)
   return true;

其中 returns 以下错误:

BinarySearchTree.java:107: error: cannot find symbol if(p.getValue().compareTo(x)) ^ symbol: method compareTo(Comparable) location: class Object

我该如何解决这个错误?我试图搜索这个问题,但这并不是特别有用。

更新—TreeNode Class:

class TreeNode 
{
   private Object value; 
   private TreeNode left, right;
   
   public TreeNode(Object initValue)
   { 
      value = initValue; 
      left = null; 
      right = null; 
   }
   
   public TreeNode(Object initValue, TreeNode initLeft, TreeNode initRight)
   { 
      value = initValue; 
      left = initLeft; 
      right = initRight; 
   }
   
   public Object getValue()
   { 
      return value; 
   }
   
   public TreeNode getLeft() 
   { 
      return left; 
   }
   
   public TreeNode getRight() 
   { 
      return right; 
   }
   
   public void setValue(Object theNewValue) 
   { 
      value = theNewValue; 
   }
   
   public void setLeft(TreeNode theNewLeft) 
   { 
      left = theNewLeft;
   }
   
   public void setRight(TreeNode theNewRight)
   { 
      right = theNewRight;
   }
}

看起来 x 是您的 Comparable 界面。您应该在此参数上调用 compareTo 方法,然后将结果与 0 进行比较。 Comparable Javadoc 有一些用法示例。 compareTo 函数 returns:

a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.

您收到错误的原因是,起初您试图将 < 应用于不兼容的类型。 p.getValue() returns 你是一个 Object,而 x 是一个 Comparable(通常你应该在基元上应用这个运算符,比如 intlong, 等等).

第二个错误是,即使 p.getValue() 对象具有 compareTo 方法,您也必须小心与其他对象进行比较。例如,如果它是一个字符串,您只能将它与另一个字符串进行比较,例如 "str1".compareTo("str2");

为了正确比较您的值,您应该执行以下操作:

// checking if x is less than p's value
if (x.compareTo(p.getValue()) < 0) { ... }

// checking if x is greater than p's value
if (x.compareTo(p.getValue()) > 0) { ... }

// checking if x is equal to p's value
if (x.compareTo(p.getValue()) == 0) { ... }