Adloun

programmation Java (école d'ingénieur) · Chapitre 8 · Application directe du cours

Un feu tricolore

Encapsulation, membres de classe et paquets · niveau 2

Énoncé

Écrire une énumération Feu à trois valeurs VERT, ORANGE, ROUGE, de durées respectives 30, 5 et 35 secondes, avec une méthode getDuree() et une méthode suivant() qui retourne la couleur suivante dans le cycle (après ROUGE vient VERT). La méthode suivant ne doit contenir ni if ni switch. Afficher les cinq premiers changements de couleur avec leur instant.

Corrigé

Les valeurs d'une énumération sont rangées dans l'ordre de déclaration par values(), et ordinal() donne le rang de la valeur courante. La suivante est au rang : le modulo fait revenir au début après la dernière.


enum Feu {
    VERT(30), ORANGE(5), ROUGE(35);

    private final int duree;   // en secondes

    Feu(int duree) { this.duree = duree; }

    int getDuree() { return duree; }

    Feu suivant() {
        Feu[] tous = values();
        return tous[(ordinal() + 1) % tous.length];
    }
}

public class Ex7Feu {
    public static void main(String[] args) {
        Feu f = Feu.VERT;
        int t = 0;
        for (int i = 0; i < 5; i++) {
            System.out.println("t = " + t + " s : " + f);
            t += f.getDuree();
            f = f.suivant();
        }
    }
}

t = 0 s : VERT
t = 30 s : ORANGE
t = 35 s : ROUGE
t = 70 s : VERT
t = 100 s : ORANGE

Si l'on ajoute une couleur (un orange clignotant, par exemple), il suffit de l'insérer dans la déclaration : suivant reste juste, car elle utilise tous.length et non le nombre 3.

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 →