Adloun

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

Exercice suivant et tuteur

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.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →