我在Java / Processing中使用比较方法时遇到了麻烦。
它说这违反了它的总合同,我理解这意味着它不会始终如一地处理这些项目之间的关系...
但我不明白为什么。因为它只是返回角度,θ,基于ycor与xcor的比率(如sin与cos),不应该根据它们从0到360度的位置对它们进行一致排序吗?
public int compareTo(Orb other) {
double X = Math.atan2(ycor,xcor);
if (Math.atan2(other.ycor,other.xcor) > X) {
return -1;
}
if (Math.atan2(other.ycor,other.xcor) == X) {
return 0;
}
return 1;
}
非常感谢任何帮助,谢谢!
特定上下文是在运行Collection.Sort()时发生错误。
答案 0 :(得分:0)
编辑:请参阅Louis Wasserman上面的评论:
xcor
和ycor
是否有可能为零?我怀疑这会导致NaN。切换到Double.compare(Math.atan2(ycor, xcor)
,Math.atan2(other.ycor, other.xcor))
应该有效。
没有明确定义一个角度是否比另一个角度“更大” - 如果我顺时针旋转170度,那么我也逆时针旋转190度。
即使您选择使用“180度以内”,但仍然没有满足三角不等式。