programmation Java (école d'ingénieur) · Chapitre 10 · Application directe du cours
Des durées comparables
Classes abstraites et interfaces · niveau 2
Énoncé
Écrire une classe Duree, construite à partir d'un nombre d'heures et de minutes (les minutes peuvent dépasser : h min est une durée valide), qui implémente Comparable<Duree> et s'affiche sous la forme 1h05. Trier le tableau . Que vaut new Duree(1, 35).compareTo(new Duree(0, 95)) ?
Corrigé
Le plus simple est de ranger la durée en minutes : la comparaison devient une comparaison d'entiers, et h min est automatiquement égale à h min.
class Duree implements Comparable<Duree> {
private final int minutes; // durée totale en minutes
Duree(int h, int min) { minutes = 60 * h + min; }
@Override
public int compareTo(Duree autre) {
return Integer.compare(minutes, autre.minutes);
}
@Override
public String toString() { return minutes / 60 + "h" + String.format("%02d", minutes % 60); }
}
Duree[] t = { new Duree(1, 30), new Duree(0, 95), new Duree(2, 0), new Duree(0, 45) };
Arrays.sort(t);
System.out.println(Arrays.toString(t));
System.out.println(new Duree(1, 35).compareTo(new Duree(0, 95)));
[0h45, 1h30, 1h35, 2h00]
0
La comparaison renvoie : les deux durées valent minutes. Le format %02d écrit les minutes sur deux chiffres, avec un zéro en tête si nécessaire (2h00).
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 podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.