Objektarray sortieren

Status
Nicht offen für weitere Antworten.

dk

Mitglied
Erstmal: ja ich habe die Suche benutzt und ne Menge dazu gefunden, wie man Arrays sortiert. aber ich habe entweder kein wort verstanden (wie funktioniert ein verdammter Comperator?? 😉), oder es war nicht hilfreich. daher poste ich mal mein spezielles problem.

ich habe einen Array aus Punktobjekten, die jeweils durch ein x- und y-Wert dargestellt werden.
innerhalb des Punktobjektes gibt es jetzt die Möglichkeit mit abstand(Point p) den Abstand des Punktes zum Koordinatenursprung zu ermitteln.

jetzt sollt der Array, in dem die Punktobjekte in zufälliger Reihenfolge initialisiert wurden, in einer neuen Reihenfolge sortiert werden, nämlich in steigender Entfernung zum Ursprung. sprich:

Array[0] = pointOne; mit den Koordinaten (4,2)
Array[1] = pointTwo; mit den Koordinaten (10,14)
Array[2] = pointThree; mit den Koordinaten (1,1)

wird zu

Array[0] = pointThree; mit den Koordinaten (1,1)
Array[1] = pointOne; mit den Koordinaten (4,2)
Array[2] = pointTwo; mit den Koordinaten (10,14)

wäre nett wenn mir jemand mit Code und vielleicht einer passenden Erklärung helfen kann 🙂

ps: abstand(Point p) gibt übrigens einen Double zurück
 
Ein Comparator vergleicht zwei Objekte. Falls das erste Objekt kleiner als das zweite ist: -1 zurückgeben. Wenn erster grösser als zweites: 1 zurückgeben. Wenn gleich 0 zurückgeben.

Mit der "sort"-Methode der Klasse "Arrays" kann sortiert werden (der Comparator sagt der sort Methode, welches Objekt hinter welchem Objekt zu liegen kommt).

Ungefähr so:
Code:
Comparator<Point> c = new Comparator<Point>{
  public int compare( Point a, Point b ){
    int da = a.abstand();  // zum Nullpunkt
    int db = b.abstand();

    if( da < db )
      return -1;
    if( da > db )
      return 1;
    return 0;
  }
};

Point[] array = ... // der kommt von irgendwoher

Arrays.sort( array, c );
 
sorry man, hab das jetzt gerade mal versucht zu übernehmen, aber eclipse zeigt mir nurnoch fehler an 🙂
und wenn ich es dann mal spaßeshalber in der eingabeaufforderung kompiliere zeigt er mir diesen Fehler an:

ArrayTest.java:45: '(' or '[' expected
Comparator<Point> c = new Comparator<Point>{
^
1 error

mein Code des Comperators sieht im moment so aus

Code:
public class ArrayTest {
	
	...

	Comparator<Point> c = new Comparator<Point>{
		  public double compare( Point a, Point b ){
		    double da = a6.PointUse.abstand(a);  // zum Nullpunkt
		    double db = a6.PointUse.abstand(b);

		    if( da < db )
		      return -1;
		    if( da > db )
		      return 1;
		    return 0;
		  }
	};

	...

}

also entweder habe ich was falsch übernommen, oder irgendwas nicht verstanden 🙂
 
Die Syntax "Comparator<Point>" ist aus der Javaversion 5. Schau mal nach, was du unter "Projekt - Properties - Java Compiler - Compliance Level" eingestellt hast.
 
genau schauen Leute..
das ist kein Generics-Fehler sondern Syntax so wie es die Fehlermeldung sagt,

so gehts:
Comparator<Point> c = new Comparator<Point>() {
...
};
 
hab ich mal geändert, funktioniert immer noch nicht.

die fehlermeldung sieht so aus:

ArrayTest.java:47: <anonymous a8.arrays.dim01.ArrayTest$1> is not abstract and does not override abs
tract method compare(a6.Point,a6.Point) in java.util.Comparator
public double compare(Point a, Point b){
^
1 error

der code dazu so:
Code:
public class ArrayTest {
   
   ...

	Comparator<Point> c = new Comparator<Point>(){
		  public double compare(Point a, Point b){
		    double da = a6.PointUse.abstand(a);  // zum Nullpunkt
		    double db = a6.PointUse.abstand(b);

		    if( da < db )
		      return -1;
		    if( da > db )
		      return 1;
		    return 0;
		  }
	};

   ...

}

freue mich weiterhin über jede hilfe 🙂
 
> freue mich weiterhin über jede hilfe icon_smile.gif

also wenn ich sowas lese, dann bin ich gleich weg..

der Rückgabewert muss int sein, nicht double..
man darf übrigens auch selber denken 😉
 
Das steht sogar ziemlich deutlich in der Fehlermeldung. Vielleicht sollte man doch erst mit C++ anfangen und dann Java lernen. Die Fehlermeldung sind dann ein Traum. 😀
 
danke für deine hilfe slaterB, auch wenn du ja wohl inzwischen weg bist 😉
natürlich hätte ich das selber finden können, hab ich aber nicht, so wie niemand immer alles entdeckt, was er entdecken kann. trotzdem nochmal danke, auch an die anderen die geholfen haben.
 
nix finden ist ok, sonst wärs ja langweilig im leeren Forum 😉

aber nciht den Eindruck erwecken, du hättest nur zwei Klammern eingefügt und postest nun die nächste Fehlermeldung mit einem fröhlichen
'bitte weiter machen'..
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben