Was ist mit dieser Aufgabenstellung zum Comparator in Java gemeint?

...komplette Frage anzeigen

1 Antwort

Zum Sortieren ist es notwendig, die Objekte der zu ordnenden Liste miteinander zu vergleichen. Dies soll ein frei bestimmbares Objekt übernehmen, ein Comparator. Je nachdem, was dieses Objekt in der Methode zurückgibt, die von ihm zwingend implementiert werden muss, entscheidet sich auch die Art an Sortierung (absteigend, aufsteigend, gar keine Sortierung).

// irgendwo in der sort-Methode:
if(comparator.compare(a, b) > 0) { // der Comparator muss zwingend die Methode compare implementieren
  //...
}

In Java gibt es dazu passende Interfaces. Du hast sie bereits gefunden, wie ich aus deiner anderen Fragestellung entnehmen kann.

Nun ist zu beachten, dass die Methode typabhängig ablaufen sollte. Wieso? Weil nicht jedes Objekt die Möglichkeit anbietet, mit einem anderen Objekt verglichen zu werden.

Ein generischer Comparator macht daher Sinn:

class Comparator<T extends Comparable<T>> implements Comparator<T> {
public int compare(T a, T b) {
return a.compareTo(b);
}
}


Dieser garantiert, dass beide Objekte die Methode compareTo implementieren (also vergleichbar sind).

Ranaros 04.07.2017, 19:58

Ja das habe ich mir schon gedacht, in der anderen Aufgabe(und hier auch Fragestellung) musste ich ja auch 2 dinge in der compare Methode mit compareto vergleichen. Das Prinzip davon habe ich auch verstanden. In der Aufgabenstellung steht aber nur:

Erstellen Sie die Klassen NameComparator und AblaufComparator, welche beide von dem generischen Interface Comparator erben (praktisch ist hier die direkte Angabe des Typen Maschine als Typparameter

class Comparator<T extends Comparable<T>> implements Comparator<T> {
public int compare(T a, T b) {
return a.compareTo(b);
}
}

Soll ich das jetzt so lassen oder deins übernehmen? Wir sollen uns schon an der Aufgabenstellung orientieren. 

Mein Problem ist jetzt noch, dass ich nicht weiß, was genau ich vergleichen muss, es wurden ein paar Bilder dabei gelegt, die zeigen, wie die Maschinen sortiert wurden. Da wurden die Erzeuger nach oben gelegt und die Verwerter nach unten. Außerdem wurden noch die Namen Alphabetisch sortiert. 

Soll ich jetzt wieder 2 Maschinen anlegen und dann die typen vergleichen? Also in meiner Maschinenklasse gibt es die Eigenschaften typ und name, name habe ich ja schon in der anderen Aufgabe verglichen, kommen jetzt die typen dran?? Ich verstehe einfach nicht die Aufgabe, die ist wieder so unnötig kompliziert formuliert..

In der Klasse AblaufComparator sollen die Maschinen so verglichen werden, dass eine logische Abfolge realisiert werden kann. Wird dieser Comparator der sort()-Methode der Maschinenliste übergeben, so soll später (soweit möglich) jede Maschine ausführbar sein (also im Falle eines Verwerters alle Abhängigkeiten vorhanden sein). Bedenken Sie hierbei die unterschiedlichen Typen der Maschinen sowie deren Erzeugnisse und Abhängigkeiten. Folgende Bilder zeigen ein mögliches Ergebnis dieses Sortiervorganges:

0
regex9 04.07.2017, 22:16
@Ranaros

Wir sollen uns schon an der Aufgabenstellung orientieren.

Diesen Aufgabenteil hattest du anfangs nicht gepostet. 😉

Orientiere dich in diesem Fall also an der Aufgabenstellung und erstelle konkrete Comparator-Subklassen. Dann vergleichst du in der jeweiligen compare-Methode die Attribute, die die Sortierung entscheiden.

public int compare(Maschine maschine, Maschine andereMaschine) {
  return maschine.getName().compareTo(andereMaschine.getName());
}
public int compare(Maschine maschine, Maschine andereMaschine) {
   return maschine.getType().equals("Verwerter") ? -1 : 1;
}

Was mit den Abhängigkeiten gemeint ist, verstehe ich derzeit leider auch nicht. Vielleicht gibt es eine abstufende Sortierung: Also wird in erster Instanz der Erzeuger nach oben sortiert, bei gleichen Typen nach ABC geordnet und wenn da die Namen auch gleich sind, die Kosten als letztes Indiz für die Reihenfolge gewertet (falls diese überhaupt eine Rolle spielen).

Beim NameComparator ist der Name in oberster Priorität, beim AblaufComparator der Typ.

Es wäre günstig, wenn du den Aufgabensteller noch einmal um eine Erklärung der Anforderungen bittest.

2
Ranaros 08.07.2017, 13:43
@regex9

Hi nochmal :) Danke für deine Antworten :D Ich konnte die Aufgabe bei einem Beratungstermin abschließen und abgeben, hab da auch nochmal meinen Professor gefragt, er hat mir dann ein wenig geholfen und dann lief es auch schon. Jetzt kann ich wieder in ruhe schlafen :D Danke :)

0

Was möchtest Du wissen?