Java 使用比较器对数组排序时发生ClassCastException
我喜欢这门课比较Y坐标(降序) 我有预定义的Point类 在main类中,我发送比较Y数组,它是保持点(type=Point)Java 使用比较器对数组排序时发生ClassCastException,java,comparator,Java,Comparator,我喜欢这门课比较Y坐标(降序) 我有预定义的Point类 在main类中,我发送比较Y数组,它是保持点(type=Point)array.sort(array)它给了我ClassCastExeption 如何解决这个问题 公共类CompareY实现Comparator{ 公共比较{ } @凌驾 公共整数比较(点a1、点a2){ 如果(a1.y>a2.y) 返回-1; 否则如果(a1.y
array.sort(array)代码>它给了我ClassCastExeption
如何解决这个问题
公共类CompareY实现Comparator{
公共比较{
}
@凌驾
公共整数比较(点a1、点a2){
如果(a1.y>a2.y)
返回-1;
否则如果(a1.ya2.x)
返回-1;
其他的
返回0;
}
}
该方法需要实现Comparable
的类型。如果要创建CompareY
对象数组,请注意CompareY
不实现comparebe
,因此在运行时会得到ClassCastException
,因为CompareY
不能转换为C可比较的
。同样,如果您正在创建一个点
对象的数组
,您仍然会得到一个类异常
,因为点
没有实现可比较的
要解决此问题,请执行以下操作:
创建点
对象的数组
使用采用比较器的方法
例如:
Point[] points = new Point[]{new Point(..),new Point(...)};
Arrays.sort(points,new CompareY());
或者,您可以让点
类实现可比较
,并定义点
的自然顺序。然后您可以使用数组。排序(对象[]a)
方法直接执行。您能指出哪里出现错误吗?并向我们展示如何使用您的构造。顺便说一句,您可以通过在每行末尾添加空格来实现问题中的换行。您能显示错误出现的代码吗?看起来您正在尝试对包含不同类型对象的对象
数组进行排序类型。如果x
和y
为int,则可以使用return a1.y-a2.y
避免冗长,如果不是,则使用Math.signum()
将有所帮助。@serdar查看我的答案,了解为什么会出现ClassCastException
以及如何解决此问题。我认为您发布的问题已经完成,无需从您的角度发布额外的代码来缩小问题范围。+1ı已经在point类中实现了类似的接口,并且工作正常。ıused Array.sort(points,new CompareY());有效。谢谢你的回答。@serdarözer我将此作为问题的一部分发布。在实现了Comparable
之后,你是否仍然得到ClassCastException
?你能用创建数组的代码编辑你的问题并将其传递给数组。请排序方法吗?@serdarözer就是这样说即使在实现了Comparable
,您也面临着这个问题?我认为这是不可能的。尽管如此,我相信我的答案(双关语的意思)为您指明了正确的方向,所以不要忘记投票并接受答案:)不,只需在这段代码数组之后编写。排序(points,new CompareY());和ı接受了答案,但ı没有足够的声望来投票:-)@serdarözer My bad。我一直忘记投票限制,直到达到某个代表为止;)
Point[] points = new Point[]{new Point(..),new Point(...)};
Arrays.sort(points,new CompareY());