Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
hallo, ich möchte in meinem Code zwei Objekte miteinander vergleichen also inhaltlich ob sie die selben Zahlen haben bspw. aber ich bekomme hier ständig ein false raus. Kann mir jemand sagen was ich falsch mache ? Danke im Voraus!
Java:
public boolean compare(Fraction m) { //vergleicht zwei Brüche aufgrund ihrer Zahlenwerte
if (this.numerator == m.getNumerator()) {
return true;
} else {
return false;
}
}
public static void main(String[] args) {
Fraction a = new Fraction(5,5);
Fraction b = new Fraction(5,5);
System.out.println( a.compare(b));
}
}
Die Methode muss überschrieben werden.
Da jede Klasse von Object abgeleitet ist werden toString, equals, etc. geerbt. Wenn du eine neue Klasse schreibst und die equals Methode nutzen möchtest muss sie überschrieben werden!
Ich dachte, Du willst zwei Objekte mit == vergleichen, das wäre falsch, weil man Objekt inhaltlich per equals miteinander vergleicht. Du kannst aber ruhig die compare-Methode lassen.
Wenn numerator und denominator primitive Werte sind (z. B. Datentyp int), wäre die equals-Methode z. B.
Java:
@Override
public boolean equals(Object o) {
if (o == null || o == this || !(o instanceof Fraction)) {
return o == this;
}
Fraction f = (Fraction) o;
return numerator == f.numerator && denominator == f.denominator;
}
@Override
public int hashCode() {
return 17+f.numerator*5+13*denominator;
}
Also ich hab das jetzt so versucht und das Programm gibt mir ständig false zurück. Kann mir jemand sagen woran das liegt? Das in den Parameter übergebene Objekt m wird mit dem Objekt verglichen, auf dem die Methode aufgerufen wird (die beiden Fraction-Objekte inhaltlich gleich).
Ich prüfe in der Methode als erstes mit dem instanceof-Operator, ob obj eine Instanz der Klasse Fraction ist. Aber bekomme immer wieder false..
Code:
@Override
public boolean equals(Object m){
if(m instanceof Fraction){
Fraction p = (Fraction) m;
return (numerator == p.numerator) && (denominator == p.denominator);
}
else{
return false;
}
}
public static void main(String[] args) {
Fraction a = new Fraction(5,5);
Fraction b = new Fraction(5,5);
System.out.println(a.equals(b));
}
}
public static void main(String[] args) {
Fraction a = new Fraction(5,5);
Fraction b = new Fraction(5,5);
System.out.println(a.equals(b));
}
Ändere kommt true raus.
Das bei dem Code oben vor dir kein True rauskommt ist ja wohl klar.
Wenn, kopiere bitte den gesamten fehlerhaften Code rein - und nicht Bruchstücke verschiedener Varianten. Die Main Methode, die angeblich false liefert ist nicht die, die du gerade gepostet hast.
public static void main(String[] args) {
Fraction a = new Fraction(5,5);
Fraction b = new Fraction(5,5);
System.out.println(a.equals(b));
}
Ändere kommt true raus.
Das bei dem Code oben vor dir kein True rauskommt ist ja wohl klar.
Wenn, kopiere bitte den gesamten fehlerhaften Code rein - und nicht Bruchstücke verschiedener Varianten. Die Main Methode, die angeblich false liefert ist nicht die, die du gerade gepostet hast.
equals sollte auch das equals von Object überschreiben, d.h. Argument ist ein Object und kein Fraction.
Das ist hier aber egal, da du ja Fraction Instanzen hast. Aber wenn du nicht equals überschreibst, dann musst du nicht prüfen, ob das Argument eine Instanz von Fraction ist, da ja das Argument schon vom Typ Fraction ist.