3

私はインターフェースの実装に関する宿題に取り組んでいますが、少し迷っています。同等のインターフェースを実装し、compareTo()メソッドを使用する必要があります。これが私のスーパークラスのコードです。これには、すべて異なる形式の車両である3つのサブクラスがあります。この場合、私は彼らが持っているドアの数をキャンピングしようとしています。

以下は「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を実装する必要がありComparable<Vehicle>ます。そうすれば、メソッドはキャストするのではなく引数compareToを取ることができます。Vehicle

ただし、メソッドの実装方法を尋ねているcompareTo場合、この車両が他の車両よりも小さいと思われる場合は、負の数を返します。大きいと思われる場合は正の数を返し、等しいと思われる場合はを返し0ます。色はsなので、おそらくcolor.compareTo(otherVehicle.color)色の比較に使用しますString

それは十分なヒントになるはずです!

于 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

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);
        }
于 2012-04-12T19:23:25.347 に答える
1

compareTo()int現在のオブジェクトが指定されたオブジェクト(パラメーター)とどのように比較されるかを表すを返すことになっています。つまり、現在のオブジェクトが渡されたオブジェクトより「小さい」場合、負の数を返す必要があります。

于 2012-04-12T19:19:53.720 に答える