2012-04-12 4 views
3

Ich arbeite an einer Hausaufgabe zur Implementierung von Schnittstellen und bin ein wenig verloren. Ich muss die vergleichbare Schnittstelle implementieren und die compareTo() -Methode verwenden. Hier ist der Code meiner Superklasse, es hat drei Unterklassen, die alle verschiedene Formen von Fahrzeugen sind. In diesem Fall versuche ich, die Anzahl der Türen, die sie haben, zu bekämpfen.Java mit der vergleichbaren Schnittstelle

Unten ist der Code für das „Fahrzeug“ Superklasse

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; 
    } 
} 

Derzeit ist es ein work in progress, und ich bin nicht sicher, wohin man von hier auf der compareTo-Methode zu gehen. Jede Hilfe wird sehr geschätzt.

Danke!

bearbeiten Sobald ich die Methode compareTo() arbeitet in der übergeordneten Klasse zu bekommen, ist es etwas, das ich zu den Unterklassen hinzufügen muß diese Funktion machen?

Danke!

Antwort

4

Sie sollten Fahrzeug implementieren Comparable<Vehicle>, so dass Ihre compareTo Methode kann ein Vehicle Argument statt zu müssen zu werfen.

Aber wenn Sie fragen, wie Sie die compareTo Methode implementieren, dann, wenn dieses Fahrzeug weniger als das andere Fahrzeug sein soll, geben Sie eine negative Zahl zurück; Wenn es größer sein soll, geben Sie eine positive Zahl zurück, und wenn sie gleich sein sollen, geben Sie 0 zurück. Sie werden wahrscheinlich color.compareTo(otherVehicle.color) verwenden, um die Farben zu vergleichen, da sie String s sind.

Das sollte genug Hinweise sein!

+0

Danke, das hilfreich ist. Obwohl ich noch nicht sicher bin, wie man die compareTo() Methode von hier richtig benutzt. Ich bin mir nicht sicher, wie man den numberOfDoors int mit diesen Objekten vergleicht – salxander

+0

ah! Ich habe den Rest deiner Antwort nicht gesehen, danke! – salxander

+0

Sie können nur die altmodischen vergleichen. 'if (this.numberOfDoors

1

compareTo() soll eine int zurückgeben, die darstellt, wie das aktuelle Objekt mit dem gegebenen Objekt (dem Parameter) verglichen wird. Mit anderen Worten, wenn Ihr aktuelles Objekt "kleiner als" das übergebene Objekt ist, sollte es eine negative Zahl zurückgeben.

+0

Vielen Dank für die Hilfe! – salxander

2

Wenn der Vergleich nur auf Türen basieren, versuchen Sie Folgendes:

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

Vielen Dank! – salxander

1

Zuerst müssen Sie Ihr Fahrzeug implementieren Comparable<Vehicle> als Louis sagte. Dann möchten Sie in Ihrer compareTo-Methode einen Wert zurückgeben, der den Aspekt des Fahrzeugs vergleicht, mit dem sie verglichen werden sollen.

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

Dies wird eine Null zurückgeben, wenn die Anzahl der Türen gleich ist. Ein negativer Wert, wenn v mehr Türen hat, und ein positiver Wert, wenn v weniger Türen hat.

Sie auch etwas anderes vergleichen könnte (wie Make des Autos, wenn Sie hinzufügen, dass)

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

Danke für die Hilfe! – salxander