Methoden Überladen des .equals-Operators

Problem: Beim Override des Equal-Operators wird nur die Farbe berücksichtigt, wenn ich in der Main-Methode dann die Autos vergleichen will.

[CODE lang="java" title="AutoKlasse"]public class Auto{

private String farbe;
public int geschwindigkeit;

//Konstruktor
public Auto (String farbe, int geschwindigkeit){

this.farbe = farbe;
this.geschwindigkeit = geschwindigkeit;
}

public String getFarbe(){ //methode um auf farbe zuzugreifen
return farbe;
}

public int getGeschwindigkeit(){ //methode um auf geschw zuzugreifen
return geschwindigkeit;
}

String tempo = String.valueOf(geschwindigkeit);// speichern des int geschwindigkeit in String tempo damtit wir ihn unten mit equals vergleichen können ??????????

@Override
public boolean equals(Object obj){
if(this == obj){
return true;
}
if(obj == null || getClass() != obj.getClass()){
return false;
}

Auto auto = (Auto) obj;
return (farbe.equals(auto.farbe)) && (tempo.equals(auto.tempo)); //auf jeden fall doppeltes und, weil dann nur wenn beide wahr sind kommt auch true
}
}[/CODE]

[CODE lang="java" title="Main(verkürzt)"]public class Main{
public static void main(String[]args){

Auto auto1 = new Auto("blau", 230);
Auto auto2 = new Auto("blau", 236);

System.out.println(auto1.equals(auto2));
}
}[/CODE]

auto1.equals(auto2) gibt nur dann false wenn ich oben die Farbe ändere, es soll aber auch false angeben, wenn die Geschwindigkeit nicht stimmt (also nur dann true, wenn beides true ist).
 
Das Feld "temp" ist totaler Unfug.

Punkt 1: Es wird nur einmal beim erzeugen des Objektes gesetzt -damit ist es immer identisch bei allen Objekten
Punkt 2: Warum? Einfach die geschwindigkeit (mit ==) in der equals Methode vergleichen.
 
Hey, danke für die schnelle Antwort, was genau meinst du mit dem Feld "temp" ? Und den Punkt 2 hab ich auch schon mehrmals probiert, und es funktioniert trotzdem nicht (mit auto.geschwindigkeit==auto.geschwindigkeit). Hast du oder irgendwer vielleicht noch andere Vorschläge woran es liegen könnte bzw. kann mir jmd das nochmal genauer erläutern ?
Hab auch den Schnipsel in der Main, der mir das ja eigentlich sagt, dass eins der beiden schneller ist aber es kommt dennoch true am Ende aus, wenn ich sie dann mit equals() vergleiche.

Java:
        if (auto1.getGeschwindigkeit() > auto2.getGeschwindigkeit()){
            System.out.println("Auto Nr.1 ist schneller als Auto Nr.2 ! ");
        }
        else if (auto1.getGeschwindigkeit() < auto2.getGeschwindigkeit()){
            System.out.println("Auto Nr.2 ist schneller als Auto Nr.1 ! ");
        }
        else {
            System.out.println("Die Autos sind gleich schnell ! ");
 
Wie sieht deine Auto Klasse jetzt aus?

String tempo = String.valueOf(geschwindigkeit);

Wird in deinem Konstruktor vor allen anderen zuweisungen ausgeführt und da ist der int geschwindigkeit eben noch 0.
 
Zuletzt bearbeitet:

Zurück
Oben