您如何将 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
(通常你应该在基元上应用这个运算符,比如 int
,long
, 等等).
第二个错误是,即使 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) { ... }
我有一个 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
(通常你应该在基元上应用这个运算符,比如 int
,long
, 等等).
第二个错误是,即使 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) { ... }