programmation Java (école d'ingénieur) · Chapitre 12 · Application directe du cours
Classement d'un championnat
Collections et génériques · niveau 2
Énoncé
Une équipe a un nom, un nombre de points et une différence de buts. Le classement range les équipes par points décroissants ; à égalité de points, par différence de buts décroissante ; à égalité encore, par nom croissant. Écrire la classe Equipe et un Comparator<Equipe>, puis classer Lyon (20 points, différence ), Brest (, ), Nice (, ) et Lens (, ).
Corrigé
Le comparateur examine les critères dans l'ordre : il ne passe au critère suivant qu'en cas d'égalité sur le précédent. Pour obtenir un ordre décroissant, il suffit d'appeler Integer.compare en échangeant ses deux arguments.
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Exo11Classement {
static class Equipe {
final String nom; final int points, difference;
Equipe(String nom, int points, int difference) {
this.nom = nom; this.points = points; this.difference = difference;
}
@Override public String toString() { return nom + " " + points + " pts (" + difference + ")"; }
}
static class OrdreClassement implements Comparator<Equipe> {
@Override public int compare(Equipe a, Equipe b) {
if (a.points != b.points) return Integer.compare(b.points, a.points); // décroissant
if (a.difference != b.difference) return Integer.compare(b.difference, a.difference);
return a.nom.compareTo(b.nom); // croissant
}
}
public static void main(String[] args) {
List<Equipe> l = new ArrayList<>();
l.add(new Equipe("Lyon", 20, 5));
l.add(new Equipe("Brest", 23, 2));
l.add(new Equipe("Nice", 20, 9));
l.add(new Equipe("Lens", 20, 5));
Collections.sort(l, new OrdreClassement());
for (int i = 0; i < l.size(); i++) System.out.println((i + 1) + ". " + l.get(i));
}
}
1. Brest 23 pts (2)
2. Nice 20 pts (9)
3. Lens 20 pts (5)
4. Lyon 20 pts (5)
Brest est premier malgré une moins bonne différence de buts : les points priment. Lens et Lyon sont à égalité de points et de différence : l'ordre alphabétique les départage. Le chapitre 13 écrira ce même comparateur en une seule expression, sans classe auxiliaire (exercice 13.3).
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.