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
- 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.