我正在尝试使用 Arrays.sort
对矩形数组进行排序。类Rectangle
实现Comparable<Rectangle>
,我已经重写了compareTo()
方法。这是两个类:矩形和测试器类。
public class Rectangle implements Comparable<Rectangle> {
private int length;
private int width;
public Rectangle(int length, int width) {
this.length = length;
this.width = width;
}
public int getLength() {
return length;
}
public int getWidth() {
return width;
}
public int getPerimeter() {
return (2*length) + (2*width);
}
public int compareTo(Rectangle x) {
int p2 = ((Rectangle)x).getPerimeter();
return this.getPerimeter()-p2;
}
public String toString() {
return "Perimeter: " + this.getPerimeter();
}
}
import java.util.*;
public class Test {
public static void main(String[] args) {
Rectangle[] rectangles = new Rectangle[4];
rectangles[0] = new Rectangle(3, 4);
rectangles[1] = new Rectangle(2, 6);
rectangles[2] = new Rectangle(2, 2);
rectangles[3] = new Rectangle(1, 1);
for (Rectangle x : rectangles) {
System.out.println(x.getPerimeter());
}
Arrays.sort(rectangles);
}
但是,我不断收到一条错误消息:
线程"main"中的异常 java.lang.ClassCastException:矩形不能强制转换为 java.lang.Comparable。
有人可以帮助我看到我做错了什么吗?
Exception in thread "main" java.lang.ClassCastException: Rectangle cannot be cast to java.lang.Comparable.
可能您在主类中的矩形版本没有可比性。 确保您引用的类 Rectagle 是您在上面显示的类。
确保正确生成类。我建议使用 IDE 来构建类,并进行干净的构建应该可以解决此问题。