Java使用可比较的接口

时间:2012-04-12 19:15:53

标签: java interface comparable

我正在做一个关于实现接口的家庭作业,并且有点迷失。我需要实现类似的接口并使用compareTo()方法。这是我的超级类的代码,它有三个子类,它们都是不同形式的车辆。在这种情况下,我正试图占据他们拥有的门的数量。

以下是“Vehicle”超类

的代码
package vehicle;

abstract public class Vehicle implements Comparable {
    private String color;
    private int numberOfDoors;

    // Constructor
    /**
     * Creates a vehicle with a color and number of doors
     * @param aColor The color of the vehicle
     * @param aNumberOfDoors The number of doors
     */
    public Vehicle(String aColor, int aNumberOfDoors) {
        this.color = aColor;
        this.numberOfDoors = aNumberOfDoors;
    }

    // Getters
    /**
     * Gets the color of the vehicle
     * @return The color of the vehicle
     */
    public String getColor() {return(this.color);}
    /**
     * Gets the number of doors the vehicle has
     * @return The number of doors the vehicle has
     */
    public int getNumberOfDoors() {return(this.numberOfDoors);}

    // Setters
    /**
     * Sets the color of the vehicle
     * @param colorSet The color of the vehicle
     */
    public void setColor(String colorSet) {this.color = colorSet;}
    /**
     * Sets the number of doors for the vehicle
     * @param numberOfDoorsSet The number of doors to be set to the vehicle
     */
    public void setNumberOfDoors(int numberOfDoorsSet) {this.numberOfDoors = numberOfDoorsSet;}

    public int compareTo(Object o) {
        if (o instanceof Vehicle) {
            Vehicle v = (Vehicle)o;
        }
        else {
            return 0;
        }
    }

    /**
     * Returns a short string describing the vehicle
     * @return a description of the vehicle
     */
    @Override
    public String toString() {
        String answer = "The car's color is "+this.color
                +". The number of doors is"+this.numberOfDoors;
        return answer;
    }
}

目前这是一项正在进行的工作,我不确定在compareTo方法上从何处开始。非常感谢任何帮助。

谢谢!

修改的 一旦我在超类中使用了compareTo()方法,我是否需要添加到子类中以实现此功能?

谢谢!

4 个答案:

答案 0 :(得分:4)

您应该拥有车辆工具Comparable<Vehicle>,因此您的compareTo方法可以采用Vehicle参数,而不必进行投射。

但是如果你问如何实施compareTo方法,那么如果该车辆应该小于其他车辆,则返回负数;如果它应该更大,则返回一个正数,如果它们应该相等,则返回0。您可能会使用color.compareTo(otherVehicle.color)来比较颜色,因为它们是String s。

这应该是足够的提示!

答案 1 :(得分:2)

如果比较仅基于门号,请尝试以下操作:

public int compareTo(Object o) {
    if (o instanceof Vehicle) {
        Vehicle v = (Vehicle) o;
        return getNumberofDoors() - v.getNumberOfDoors();
    } else {
        return 0;
    }
}

答案 2 :(得分:1)

compareTo()应返回表示当前对象与给定对象(参数)的比较方式的int。换句话说,如果您当前的对象“小于”传递的对象,那么它应该返回一个负数。

答案 3 :(得分:1)

首先让你的车辆工具Comparable<Vehicle>如路易斯所说。然后在你的compareTo方法中,你想要返回一个值,比较你希望它们被比较的车辆的方面。

public int compareTo(Vehicle v) {
        return this.getNumberOfDoors() - v.getNumberOfDoors();
    }

如果门的数量相同,则返回零。如果v有更多门,则为负值;如果v有更少门,则为正值。

您还可以比较其他内容(例如,如果您添加该内容,就像制作汽车一样)

public int compareTo(Vehicle v) {
            return this.make.compareTo(v.make);
        }