Java gewusst wie: Sortieren einer ArrayList von Point Objekte
Ich bin mit dem Punkt Klasse zur Verwaltung einer Liste von (x,y) - Koordinaten, und ich brauche, um Sie zu Sortieren, in der Reihenfolge des X.
Lese ich online, um eine neue Klasse PointCompare, die Comparator implementiert, aber ich bin mir nicht sicher, wie dies funktioniert und deshalb habe ich einen compiler-Fehler in der sortByXCoordinates Methode.
Hilfe würde geschätzt, eine Menge, und jegliche Kommentare sind willkommen, danke im Voraus.
Hier ist mein code:
import javax.swing.JOptionPane;
import java.awt.Point;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
//import java.util.Iterator;
public class ConvexHullMain {
private Point coordinates = new Point(0, 0);
private final int MAX_POINTS = 3;
private ArrayList<Point> coordinateList = new ArrayList<Point>();
public void inputCoordinates() {
String tempString; //temp string for JOptionPane
int tempx = 0;
int tempy = 0;
for (int i = 0; i < MAX_POINTS; i++) {
try {
//input x coordinates
tempString = JOptionPane.showInputDialog(null,
"Enter X coordinate:");
tempx = Integer.parseInt(tempString);
//input y coordinates
tempString = JOptionPane.showInputDialog(null,
"Enter Y coordinate:");
tempy = Integer.parseInt(tempString);
coordinates.setLocation(tempx, tempy);//set input data into
//coordinates object
coordinateList.add(coordinates.getLocation()); //put in
//arrayList
} //end Try
catch (NumberFormatException e) {
System.err.println("ERROR!");
main(null);
} //end catch
}//end for loop
}
public void displayPoints() {
for (int i = 0; i < MAX_POINTS; i++) {
JOptionPane.showMessageDialog(null, "Point number " + (i + 1)
+ " is: " + coordinateList.get(i));
}
//alt method
//Iterator i = coordinateList.iterator();
//String outputTemp;
//while (i.hasNext()) {
//outputTemp = i.next().toString();
//JOptionPane.showMessageDialog(null, "Point number " + " is: "
//+ outputTemp);
//}
}
/**
* This sorts the points by the X coordinates
*/
public void sortByXCoordinates(){
coordinateList.sort(coordinates, new PointCompare());
}
public class PointCompare implements Comparator<Point> {
public int compare(Point a, Point b) {
if (a.x < b.x) {
return -1;
} else if (a.x > b.x) {
return 1;
} else {
return 0;
}
}
}
public static void main(String[] args) {
ConvexHullMain main = new ConvexHullMain();
main.inputCoordinates();
main.displayPoints();
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie in der Nähe waren. Das problem, das Sie hatten, war einfach, dass Sie aufgerufen
Was Sie wollen, ist dies:
...
...
werde ich ignorieren all der code, den Sie geschrieben, weil Sie haben einfach gedumpten alles ohne sich die Zeit zur Identifizierung der relevanten Bereiche.
nun, aus deiner Frage: du hast eine
ArrayList
mitPoint
s. Sie Sortieren möchten es durch die X-Achse/Wert.Zunächst müssen Sie eine
Comparator
vergleicht manPoint
zu einem anderen.Ich wähle "box" den int in ein Integer und Integer die compareTo-Methode. Sie könnte sich mit einem ordentlichere Methode des Vergleichs, bis Sie.
Dann können Sie mit der utility-Methode
Collections.sort
und Ihre Liste ist sortiert.
Können Sie eine Bean-Komparator oder eine benutzerdefinierte Komparator-wie beschrieben im blog.
Die ArrayList-Klasse (siehe API-Dokumentation: http://download.oracle.com/javase/1.5.0/docs/api/java/util/ArrayList.html), die Sie für Ihre 'coordinateList' nicht haben eine sort () - Methode. Sie implementieren müssen, um diese selbst oder mit Sammlungen.sort().