当前位置: 首页 > 知识库问答 >
问题:

如何将一个对象与一个可比对象进行比较?

蔚宏大
2023-03-14

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

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

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

返回以下错误:

java:109:错误:二进制运算符“<”的操作数类型不正确

我还尝试了compareTo方法,通过尝试类似于

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

返回以下错误:

binarySearchTree.java:107:错误:找不到符号if(P.GetValue().compareTo(x))^symbol:method compareTo(Comparable)Location:class Object

如何修复此错误?我试着搜索这个问题,但没有特别大的帮助。

更新-TreeNode类:

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

共有1个答案

郝冥夜
2023-03-14

看起来x是您的comparable接口。您应该对此参数调用compareTo方法,然后将结果与0进行比较。类似的Javadoc有一些使用示例。compareTo函数返回:

负整数、零或正整数,因为此对象小于、等于或大于指定对象。

出现错误的原因是,最初,您试图在不兼容的类型上应用<p.getValue()返回一个对象,而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) { ... }
 类似资料:
  • 我创建了一个,当调用变量为ISE时,它会读取相关数据的表。但是,如果我尝试将与另一个对象进行比较,无法正确读取。我想告诉脚本,如果现有CSV中的任何行与匹配,则不会将数据导出到CSV,换句话说,跳过CSV文件中的重复行。CSV可能有也可能没有多行。

  • 问题内容: 我想比较两个字符串在Java中的相等性(如果一个或两个都可以),因此我不能简单地调用。什么是最好的方法? 编辑: 问题答案: 这是Java内部代码(在其他方法上)使用的:

  • 在爪哇中。如果我们必须将一个对象与另一个对象进行比较。我们比较该对象中的每个字段。 学生 1 对象具有标记 1、标记 2、标记 3、名称、年龄作为字段。学生 2 对象具有标记 1、标记 2、标记 3、名称、年龄作为字段。因此,要检查2名学生是否相等...我们比较每个字段。 但是,如果 Student 对象有许多字段,该怎么办?学生1对象有标记1,标记2,标记3,名称,年龄,地址,颜色,类,国家,部

  • 问题内容: 我有两个从同一类实例化的java对象。 如果我将它们的两个属性都设置为完全相同的值,然后验证它们是否相同 但是,这些方法都不返回真实值。我已经检查了每个属性,并且它们匹配。 如何比较这两个对象以验证它们是否相同? 问题答案: 你需要提供自己的实现。 如果哈希表中有可能使用你的对象,则还应该重写。一个合理的实施将是该对象的字段的哈希码喜欢的东西结合起来:

  • 我有两个不同的嵌套对象,我需要知道它们的一个嵌套属性是否有差异。 对象可能更复杂,具有更多嵌套属性。但这是一个很好的例子。我可以选择使用递归函数或与lodash有关的东西。。。

  • 问题内容: 我需要比较两个缓冲图像,看它们是否完全相同。只是说那等于是行不通的。我目前的方法是 但这并不能真正起作用。还有什么其他更可靠的方法? 问题答案: 显而易见的解决方案是逐像素比较它们是否相同。