我创建了自己的类,我想创建我的TreeSet。我的班级看起来像这样:
class mytree implements Comparable
{
int line_no;
line_segment line[];
public int compareTo(Object obj)
{
tree t = (tree)obj;
if(this.line_no == t.line_no)
return 0;
if(this.line[line_no]>t.line[line_no])
return 1;
else
return -1;
}
}
我正在定义类的新对象,然后将它们插入到TreeSet中。 在我发现的情况下 像
这样的价值观mytree up = tree.lower(n1);
mytree down = tree.higher(n2);
但是如果我尝试检查树中是否存在up和down的值,那么有时会发生树表示树中不存在值,有时它表示值确实存在。虽然我在比较方法中处理了0的情况,但是在我创建树时可能出现的错误。
答案 0 :(得分:0)
if(this.line_no == t.line_no)
return 0;
if(this.line[line_no]>t.line[line_no])
return 1;
您在这两项检查中比较了两种不同的东西。我希望你应该比较同样的事情,例如。
if(this.line_no == t.line_no)
return 0;
if(this.line_no > t.line_no)
return 1;
或
// also note you probably mean t.line[t.line_no] instead of t.line[line_no]
if(this.line[line_no] == t.line[t.line_no])
return 0;
if(this.line[line_no]>t.line[t.line_no])
return 1;
答案 1 :(得分:0)
此代码中存在许多错误。首先,您根本不尊重Java约定。其次,你没有使用泛型,就好像我们还在2004年,当时Java 5还不存在。第三,您的类不代表树,因此不应将其命名为mytree
。第四,你的compareTo()
方法是错误的。它应该是对称的:
A> B< ==> B<甲
如果A和B的line[line_no]
相等,那么如果将它们与A.compareTo(B)
进行比较,则比较方法将返回-1。如果将它们与B.compareTo(A)
进行比较,它也将返回-1。所以你有A< B和B< A同时。