java - Java 中的类似接口(interface)问题

标签 java arrays sorting interface

所以,我现在已经这样做了几个小时,并且几乎可以看出我已经正确完成了界面以及 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/

相关文章:

c++ - 轻松修复 - 根据多个值对双端队列进行排序

java - 运行 Appium 命令时出错 : string is not a function

java - LibGDX,需要在可移植应用程序和舞台中单击事件,如何?

javascript - 按特定顺序对数组进行排序

java - 传递和修改全局数组

python - 值错误: setting an array element with a sequence when using feed_dict in TensorFlow

python - 使用 Python 快速排序

java - 显示 Controller 中的日期对象/值以在 Play Framework/Scala 中查看

java - JFrame更新问题

ios - 当元素添加/删除到数组时得到通知