Ordnung von Punkten (x vor y) mit Comparator

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Ordnung von Punkten (x vor y) mit Comparator

    Hallo,

    ich habe eine kleine Aufgabe bekommen, die sich um den Einsatz des Comparators dreht.

    Vorab: Unsere "Lehre" ist diesbezüglich etwas chaotisch, deswegen habt bitte Nachsicht (bin auch kein Java-Profi, kommt).

    Was zu tun war: Es sollte eine Funktion geschrieben werden, die 2D-Punkte einer Liste vergleicht und ordnet. Zum Einsatz kam hier der Comparator (mit dem ich leider keinerlei Erfahrung habe)
    Ordnung:
    Wenn p1.x kleiner (links) p2.x >>> -1
    Wenn p1.x größer p2.x >>> 1
    Bei Gleichheit wird y-Wert rangezogen

    Alle ToDo sind in den Kommentaren, dazwischen meine Codefragmente:

    Quellcode

    1. [...] /**
    2. * Stellt einen Comparator für den Fall x vor y zur Verfügung.
    3. */
    4. private static Comparator<Point2d> xy_cmp = new Comparator<Point2d>(){
    5. @Override
    6. public int compare(Point2d p1, Point2d p2) {
    7. //TODO: vergleiche p1 und p2 über x-Wert
    8. // p1 links von p2 --> -1
    9. if(p1.getX() < p2.getX())
    10. {
    11. return -1;
    12. }
    13. // p1.x gleich p2.x --> überprüfe die Lage von y (Rückgabe analog zum anderen Comparator)
    14. if(p1.getX() == p2.getX())
    15. {
    16. if(p1.getY() < p2.getY())
    17. {return -1;}
    18. else if(p1.getY() > p2.getY())
    19. {return 1;}
    20. }
    21. // p1 rechts von p2 --> 1
    22. if(p1.getX() > p2.getX())
    23. {
    24. return 1;
    25. }
    26. // wenn identisch, dann überprüfe Ordnung mit y-Wert
    27. // >>> Diese Anweisung ist bereits im Fall p1.x gleich p2.x implementiert (siehe oben)!
    28. int i = 1/0;
    29. return i;
    30. }
    31. };
    32. /**
    Alles anzeigen


    Ich habe das jetzt über if-Bedingung gemacht, aber wo setze ich da den Comparator ein? Bisher habe ich den doch gar nicht benutzt, oder?
    Wie sähe so eine Ordnung mit Comparator denn überhaupt aus?

    Danke im Voraus für jede Hilfe!
  • Quellcode

    1. int i = 1/0;
    2. return i;

    Das macht keinen Sinn, besser:

    Quellcode

    1. return 1;



    Comparatoren kann man an verschiedenen Stellen einsetzen.

    Die Tool-Klasse
    Arrays (Paket java.util)
    kann dir mit der Methode sort ein Array sortieren.

    Die Tool-Klasse
    Collections (Paket java.util)
    kann dir mit der Methode sort eine Liste sortieren.

    Einem TreeSet oder einer TreeMap (java.util) kann man schon beim Konstruktor einen Comparator übergeben.