3

我正在做一个关于实现接口的家庭作业,有点迷茫。我需要实现可比较的接口并使用 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

4 回答 4

4

你应该有 Vehicle implement Comparable<Vehicle>,所以你的compareTo方法可以接受一个Vehicle参数而不是强制转换。

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

这应该是足够的提示!

于 2012-04-12T19:17:42.077 回答
2

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

public int compareTo(Object o) {
    if (o instanceof Vehicle) {
        Vehicle v = (Vehicle) o;
        return getNumberofDoors() - v.getNumberOfDoors();
    } else {
        return 0;
    }
}
于 2012-04-12T19:21:23.530 回答
1

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

于 2012-04-12T19:19:53.720 回答
1

首先让你的车辆Comparable<Vehicle>按照路易斯所说的方式实施。然后在您的 compareTo 方法中,您希望返回一个值来比较您希望它们进行比较的 Vehicle 的方面。

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

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

您还可以比较其他东西(如果添加的话,例如汽车的品牌)

public int compareTo(Vehicle v) {
            return this.make.compareTo(v.make);
        }
于 2012-04-12T19:23:25.347 回答