là tu as fait une méthode pour trier :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public void trier(ArrayList<Case> lesCases){
int i, j, temp;
for(i=0; i<lesCases.size()-1;i++){
for(j=i+1;j<lesCases.size();j++)
{
if(lesCases.getNumeroCase(i)>lesCases.get(j))
{
temp=lesCases.get(i);
lesCases.get(i)=lesCases.get(j);
lesCases.get(j)=temp;
}
}
}
}*/ // C'est donc cette partie qui ne fonctionne pas. J'avais pensé à faire un tri avec 2 boucles. |
Et bien au lieu d'essayer d'écrire ton algorithme, et bien, tu fais simplement :
1 2 3 4 5
| public void trier(ArrayList<Case> lesCases){
Collections.sort( lesCases, Comparator.comparing(Case::getNumeroCase) );
} |
Tout simplement.
Sinon, je ne vois pas trop de quoi tu parles quand tu dis que c'est plus logique
Si le but est de manipuler les listes, tout ça, ou de travailler un algorithme de tri, ok. Si c'est juste pour réinventer la roue pour le plaisir, alors c'est une perte de temps, et des risques de bugs, inutles.
if(lesCases.getNumeroCase(i)>lesCases.get(j))je n'avais pas même pas regarder l'expression à droite du > : lesCases.get(j) est du type Case ! Tu ne peux pas :
- comparer des instances de Case par <
- encore moins comparer un Case avec un int
- sans parler de ce que j'ai déjà dit sur le fait que la classe de lesCases n'a pas de méthode getNumeroCase(int)
Pour comparer les numéro des cases il faut écrire if(lesCases.get(i).getNumeroCase()>lesCases.get(j).getNumeroCase()).
Au passage, c'est toujours mieux de toujours utiliser la classe ou l'interface la plus général, parce que ça ouvre plus ton code aux évolutions.
quand tu écris :
public void methode(ArrayList<Case> cases)
tu écris une méthode qui ne s'appliquent qu'aux ArrayList.
quand tu écris :
public void methode(List<Case> cases)
tu écris une méthode qui s'appliquent à toutes les List, aux ArrayList, mais aussi aux LinkedList ou autre... Si tu modifies l'implémentation concrête un jour, pas besoin de tout modifier partout.
A moins d'avoir besoin d'appeler des méthodes spécifiques à la classe concrête, il vaut mieux typer par l'interface, et encore. On pourait très bien écrire :
1 2 3 4 5 6 7 8 9 10
| public static void remplir(List<Machin> list, int n) {
for(int i=0; i<n; i++) {
list.add(new Machin(/*... c juste pour l'exemple ...*/));
}
if ( list instanceof ArrayList<?>) {
((ArrayList<?>)list).trimToSize(); // Traitement spécifique avec une méthode spécifique de ArrayList
}
} |
Partager