Java comment trier une liste de tableaux d'objets
Je suis à l'aide de la Classe Point pour gérer une liste de (x,y) les coordonnées et j'ai besoin de les trier dans l'ordre de X.
J'ai lu en ligne pour faire une nouvelle classe PointCompare qui implémente Comparateur, cependant je ne suis pas sûr de savoir comment cela fonctionne et, par conséquent, j'ai une erreur de compilation dans le sortByXCoordinates méthode.
Aide serait appréciée beaucoup, et tous les commentaires sont les bienvenus, merci d'avance.
Ici est une partie de mon 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();
}
}
Vous devez vous connecter pour publier un commentaire.
Proximité. Le problème était simplement que vous avez appelé
Ce que vous voulez, c'est ceci:
...
...
je vais ignorer tout le code que vous avez posté, parce que vous venez d'un dumping sur tout, sans prendre le temps d'identifier les domaines concernés.
maintenant, à partir de votre question: vous avez un
ArrayList
contenantPoint
s. Vous souhaitez trier par l'axe des X/valeur.Tout d'abord vous avez besoin d'un
Comparator
qui permettra de comparer unPoint
à l'autre.Je choisis de "la boîte" l'int d'un Entier et d'utiliser Integer méthode compareTo. Vous pourriez en venir à un plus propre de la méthode de comparaison, à vous de voir.
Ensuite, vous pouvez utiliser l'utilitaire méthode
Collections.sort
et votre liste est triée.
Vous pouvez utiliser un Bean Comparateur ou personnalisé Comparateur comme décrit dans le blog.
La classe ArrayList (voir la documentation de l'API: http://download.oracle.com/javase/1.5.0/docs/api/java/util/ArrayList.html) que vous utilisez pour votre "coordinateList" n'a pas de méthode sort (). Vous aurez à mettre en œuvre vous-même, ou de l'utilisation des Collections.sort().