所以,我现在已经这样做了几个小时,并且几乎可以看出我已经正确完成了界面以及 compareTo
方法,但我得到了 ClassCastException
每当我尝试运行该程序时(尽管它构建得很好)。谁能发现我哪里出错了?
import java.util.*;
public class assignment7 {
public static void main(String[] args) {
// Q1 Test ======================================
Car c1 = new Car("96-D-0003", "Toyota", 20000, 800);
Car c2 = new Car("96-D-0002", "Nissan", 25000, 1000);
if (c1.compareTo(c2) <= 0) {
System.out.println(c1 + "\n" + c2);
} // Test compareTo method
else {
System.out.println(c2 + "\n" + c1);
}
System.out.println(c1.hashCode()); // Test hashCode method
c1.toString(); // Test toString method
System.out.print(c1); // Print the string
//End Q1 Test ===================================
// Question 2 ===================================
Car ca[] = {
new Car("96-D-005", "Toyota", 20000, 800),
new Car("96-D-004", "Toyota", 20000, 800),
new Car("96-D-003", "Toyota", 20000, 800),
new Car("96-D-002", "Toyota", 20000, 800),
new Car("96-D-001", "Toyota", 20000, 800),
}; // New array of cars
// Sort Array
Arrays.sort(ca);
//End Q2 =======================================
}
}
interface Comparable<T> {
public int compareTo(T ob);
}
final class Car implements Comparable<Car> {
private final String reg;
private final String make;
private final int mileage;
private final double value;
Car(String r, String m, int mi, int v) {
reg = r;
make = m;
mileage = mi;
value = v;
}
public String reg() {
return reg;
}
public String make() {
return make;
}
public int mileage() {
return mileage;
}
public double value() {
return value;
}
public String toString() {
return "(" + reg + ", " + make + ", " + mileage + ", " + value + ")";
} // New String method
public int compareTo(Car c) throws ClassCastException { // Cars are compared by reg number
if (reg == null) {
return -1;
} // No reg car
else {
return (reg.compareTo(c.reg));
} // New compare method to compare car regs
}
}
异常输出如下;
Exception in thread "main" java.lang.ClassCastException: Car cannot be cast to java.lang.Comparable
at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:290)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:157)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:146)
at java.util.Arrays.sort(Arrays.java:472)
at assignment7.main(assignment7.java:33)
最佳答案
您的问题是您声明了您自己的Comparable
接口(interface)版本。您的 Car
正在实现您的 Comparable
版本,而 Arrays.sort
正在使用 java.lang.Comparable
版本。删除 Comparable
接口(interface)的实现,重新编译并运行。
这是修复后我的输出:
(96-D-0002, Nissan, 25000, 1000.0)
(96-D-0003, Toyota, 20000, 800.0)
1747585824
(96-D-0003, Toyota, 20000, 800.0)
还请花一些时间正确格式化您的代码(这对您和其他人都有好处)。另外,你的类名应该以大写字母开头。
关于java - Java 中的类似接口(interface)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27030257/