compareTo() überschreiben - Problem

S

squeezer

Gast
Hallo zusammen,

ich hätte mal kleines Problemchen mit dem überschreiben der compereTo()-Methode. Hier mein Code:

Java:
public class Pferd implements Comparable<Pferd> {
	
	//Variablen
	private String name;
	private int anzHufe;
	private int alter;
	
	//Konstruktor mit Parametern
	public Pferd (String name, int anzHufe, int alter) {
		this.name = name;
		this.anzHufe = anzHufe;
		this.alter = alter;
	}
	
	//Konstruktor ohne Parameter	
	public Pferd () {}
	
	public int getAlter () {
		return this.alter;
	}
	
	//toString() überschreiben
	public String toString(){
		String rueckgabe = "Name: " + name + " Alter: " + alter + " Anzahl Hufe: "+ anzHufe;
		return rueckgabe;		
	}
	

	//compareTo() überschreiben
	public int compareTo(Pferd p) {
	
		if (this.getAlter() == p.getAlter()) {
			return 0;
		}
		
		if (this.getAlter() < p.getAlter()) {
			return 1;
		}
		
		if (this.getAlter() < p.getAlter()) {
			return - 1;
		}
	}
}

Eclipse motzt nun folgendes bei der compareTo()-Methode: This method must return a result type of int.

Das verstehe ich nicht ganz. Ich gebe doch in den 3 if-Statements jeweils einen int zurück. Was genau ist das Problem?
 
G

Gast2

Gast
Naja, es könnte doch sein dass getAlter() ne Zufallszahl zurückgibt. Dann kanns passieren dass deine Methode nichts zurückgibt. Du musst hier mit if-else if-else arbeiten.
 

Ark

Top Contributor
Folgendes dürfte in diesem Fall für alle praktischen Belange reichen:
Java:
public int compareTo(Pferd p) {
	return this.getAlter() - p.getAlter();
}
Ark
 

miasma

Aktives Mitglied
Java:
return this.getAlter() == other.getAlter() ? 0 : this.getAlter() < other.getAlter() ? -1 : 1;

Stimmt die Semantik eigentlich? ;-) Kann mir das ohne ins Javadoc zu schauen bzw. mit Eclipse halt nie merken welches 1 und welches -1 zurückgeben muss.
 
S

squeezer

Gast
Puh... jetzt bin ich komplett verwirrt.

Wenn ich dem 1. Vorschlag folge und folgendes mache:
Java:
//compareTo() überschreiben
	public int compareTo(Pferd p) {
	
		if (this.getAlter() == p.getAlter()) {
			return 0;
		}
		
		else if (this.getAlter() > p.getAlter()) {
			return 1;
		}
		
		else return - 1;
		
	}
Das funktioniert. Ich kann zwar nicht ganz nachvollziehen warum, aber es geht.

Java:
//compareTo() überschreiben
	public int compareTo(Pferd p) {
	
		return this.getAlter() - p.getAlter();
	}
Geht auch.

Meine Fragen noch:
Wenn doch bei meinen zuerst genannten if-Statements das Problem ist, dass die Methode evtl. nichts zurückgibt, falls getAlter() Zufallszahlen zurückgibt. Weshalb geht dann die zweite Variante? Dort könnten doch auch Zufallszahlen zurückkommen?

...ich glaube ich habe hier grundsätzlich irgendwas noch nicht verstanden.
 

Ark

Top Contributor
Eine Meldung der Form "This method must return a result type of …" kommt dann, wenn aus Sicht des Parsers nicht für alle Fälle klar definiert ist, welchen Wert eine Methode, die nicht void ist, zurückgeben soll. In deinem Fall fehlte eine return-Anweisung, die du ja jetzt noch hinzugefügt hast. (Du kannst auch mit throw arbeiten, um den Parser zufriedenzustellen, aber das ist jetzt wohl nicht in deinem Sinne.)

Stell dir mal vor, alle if-Bedingungen in deinem ursprünglichen Code würden zu false ausgewertet. Welchen Wert sollte die Methode dann zurückgeben? ;)

Ark
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Simon16 compareTo Methode überschreiben Allgemeine Java-Themen 4
H compareTo() Allgemeine Java-Themen 1
S Zwei Comparable (compareTo) vergleichen Allgemeine Java-Themen 6
K compareTo() für Spielbretter Allgemeine Java-Themen 2
M equals & compareTo Allgemeine Java-Themen 15
P compareTo() Allgemeine Java-Themen 2
M equals() != compareTo() ? Allgemeine Java-Themen 3
G CompareTo Allgemeine Java-Themen 4
T compareTo auf eine Klasse anwenden Allgemeine Java-Themen 20
H Arraylist mit anderer ArrayList überschreiben Allgemeine Java-Themen 17
I Collection - contains-Methode überschreiben (anonyme innere Klasse) Allgemeine Java-Themen 4
M BufferedImage toString() überschreiben Allgemeine Java-Themen 5
S Methoden Methoden überschreiben Allgemeine Java-Themen 3
J Eintrag in Datei überschreiben Allgemeine Java-Themen 6
M Interface Generische Klassen mit mehreren Typen überschreiben Allgemeine Java-Themen 0
M Classpath Standard Klasse überschreiben Allgemeine Java-Themen 2
A Vererbung finale Methoden überschreiben Allgemeine Java-Themen 24
G Tastenkombinationen überschreiben Allgemeine Java-Themen 3
D Arrays überschreiben sich Allgemeine Java-Themen 2
A ar während der Laufzeit überschreiben Allgemeine Java-Themen 20
R Input/Output Objekte speichern ohne überschreiben Allgemeine Java-Themen 7
Tobse Input/Output Datei Teilweise überschreiben Allgemeine Java-Themen 7
D this mit Objekt überschreiben Allgemeine Java-Themen 17
L Datei sicher löschen/mehrfach überschreiben? Allgemeine Java-Themen 2
N Datei überschreiben Allgemeine Java-Themen 23
M Swing Originaldatei wird gelöscht, anstatt mit temporärer überschreiben (Ubuntu) Allgemeine Java-Themen 9
Meldanor finalize Methode überschreiben für .close() Allgemeine Java-Themen 5
T Mit JNI finale Variablen überschreiben Allgemeine Java-Themen 14
W DefaultComboBoxModel überschreiben Allgemeine Java-Themen 2
R Dateiarbeit: In Datei weiterschreiben statt überschreiben Allgemeine Java-Themen 5
G toString() von java.io.File überschreiben Allgemeine Java-Themen 8
MQue tableChanged() überschreiben Allgemeine Java-Themen 4
D Instanzmethoden mit statischen Methoden überschreiben Allgemeine Java-Themen 8
ruutaiokwu Per Reflection membervariablen überschreiben / zuweisen / nullen Allgemeine Java-Themen 5
G Button-Array überschreiben und dem Container zufügen? Allgemeine Java-Themen 2
B in file immer 2. zeile überschreiben Allgemeine Java-Themen 8
E *.class ändern/ersetzen/überschreiben. Allgemeine Java-Themen 9
T Final Methode dennoch überschreiben! Allgemeine Java-Themen 10
G static- Methoden überschreiben Allgemeine Java-Themen 10
O Exceptionklasse überschreiben Allgemeine Java-Themen 7
V Methode überschreiben -> leer lassen? Allgemeine Java-Themen 3
R toString() methode überschreiben mit rekursivem aufruf. Allgemeine Java-Themen 8
H zwei Date Variablen überschreiben sich Allgemeine Java-Themen 2
P java.util.List - Typ überschreiben Allgemeine Java-Themen 9
H Methoden überschreiben Allgemeine Java-Themen 4
André Uhres equals überschreiben Allgemeine Java-Themen 31
P Eigenschaften eines Buttons überschreiben/ändern Allgemeine Java-Themen 2
M Array nicht überschreiben? Allgemeine Java-Themen 6
A Objekt überschreiben Allgemeine Java-Themen 6
B Equals Methode überschreiben mit Array Allgemeine Java-Themen 2
N Konsolenzeile überschreiben? Allgemeine Java-Themen 6
N Java Klassen "überschreiben" Allgemeine Java-Themen 28
S java.io.InputStream.read(byte[] b) überschreiben Allgemeine Java-Themen 33
J txt löschen oder txt datei überschreiben Allgemeine Java-Themen 1
M Methode überschreiben? Allgemeine Java-Themen 11
M Mit einem Java Programm Festplatte mit 0 überschreiben Allgemeine Java-Themen 2
meez java.security Datei "überschreiben" Allgemeine Java-Themen 4
M Bean Listener hinzufügen und Methode später überschreiben Allgemeine Java-Themen 27
P Klassen überschreiben Allgemeine Java-Themen 5
krgewb Problem mit Umlauten und Eszett bei InputStream Allgemeine Java-Themen 3
Max246Sch Backtracking Problem Box Filler Allgemeine Java-Themen 6
NightVision402 VisualVM Startskript Problem Allgemeine Java-Themen 3
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
F Problem mit PDFBOX Library Allgemeine Java-Themen 1
A Java modul Problem Allgemeine Java-Themen 4
D Read JSON File Problem Allgemeine Java-Themen 9
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
J Problem mit JasperReports Allgemeine Java-Themen 8
M log4j Problem mit jlink Allgemeine Java-Themen 19
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
torresbig Website login Problem - Jsoup, wie bisher, klappt nicht! Allgemeine Java-Themen 31
P Selenium . getText Problem Allgemeine Java-Themen 9
A Jar zu Exe Problem Allgemeine Java-Themen 13
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
A Thread.sleep Problem Allgemeine Java-Themen 2
A Problem bei der Nachbarschafttest Allgemeine Java-Themen 11
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
G javamail Problem beim Empfangen von Nachrichten Allgemeine Java-Themen 3
Splayfer JDA Problem mit MessageCounter Allgemeine Java-Themen 0
Splayfer Problem mit BufferedWriter Allgemeine Java-Themen 3
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
N Maven Problem mit Datenbanktreiber (H2 Embedded) Allgemeine Java-Themen 12
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
C ArrayList Problem Allgemeine Java-Themen 3
kev34 nim-Spiel problem Allgemeine Java-Themen 1
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
G Welches Problem besteht bei den Typparametern? Allgemeine Java-Themen 5
temi Problem mit Aufrufreihenfolge bei Vererbung Allgemeine Java-Themen 3
Sumo_ow "ArrayIndexOutofBoundsException: 2" Array Problem Allgemeine Java-Themen 6
T PIM basierend auf netbeans via AnyDesk Problem Allgemeine Java-Themen 3
xGh0st2014 Problem mit Java Array Allgemeine Java-Themen 1
Kirby.exe Verständnis Problem bei Rucksack Problem Allgemeine Java-Themen 6
B Eclipse-Lombok-Problem Allgemeine Java-Themen 19
I Input/Output ObjectOutputStream - Problem Allgemeine Java-Themen 7
1 Multiple Choice Knapsack- Problem Allgemeine Java-Themen 2
kodela Problem mit strukturiertem Array Allgemeine Java-Themen 18
E Problem mit Gridlayout und Button Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben