[Précédent] |
3.5 |
On tourne en rond - Corrigé | Niveau 1 |
||
Fichiers: |
BouclesEquivalentes.java |
BouclesFor
:Boucle 1: 0 1 2 3 4 Boucle 2: 3 4 5 6 7 8 Boucle 3: 2 1 0 -1 Boucle 4: Boucle 5: 0 5 * 1 6 * Boucle 6: 0 5 * 1 6 * 2 7 * 3 8 * 4 9 * 5 10 * 6 11 * 7 12 * 8 13 * 9 14 * 10 15 * Boucle 7: 3 true * 4 true * 5 true * 6 true * Boucle 8: 0 6 * 1 5 * 2 4 * Boucle 9: (2 boucles for imbriquées) 0 0 1 2 * 1 0 1 2 * 2 0 1 2 * Boucle 10: (boucle "infinie", tapez <ctrl-c> pour l'interrompre) 3 2 1 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 etc ...
.. bon la dernière boucle n'est pas si infinie que ça en réalité puisqu'elle pourra s'arrêter lorsque la valeur de i dépassera la valeur maximale possible pour un entier (overflow) et pourra alors "basculer" vers une valeur positive. Essayez ceci pour vous en convaincre:
int i = 3; for (; i < 15; i--) { } System.out.println("Fin de boucle: " + i);qui donnera:
Fin de boucle: 2147483647
Notez pour cet exercice, la tournure particulièrement alambiquée de la séquence de mise à jour de la première boucle (a = a++) : style à éviter absolument, comme indiqué en cours ! En notation postfixée, l'opérateur ++, retourne d'abord la valeur de a puis ensuite incrémente. Lorsque l'on fait a = a++, la variable a "récupère" donc la valeur avant incrémentation... fort laid !
Affichage du programmeAffichageBoucles
:Boucle 1 2 3 4 Boucle 2 5 10 20 Boucle 3 12 6 0 -6 -6 Boucle 4 3 Boucle 5 4 Boucle 6 3
Boucle 1 : en Java on ne peut pas redéclarer localement (dans la boucle for) une variable déjà déclarée plus globalement (la déclaration du i précédant le for).
Boucle 2 : en Java, une variable déclarée dans le bloc d'initialisation d'une boucle for est locale au corps de la boucle (ne peut être utilisée en dehors). Il y avait le même petit piège que plus haut (un point virgule à la fin de la ligne for (int i = 0; i < 5; ++i); et une indentation sciemment faussée ).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
class BouclesEquivalentes { public static void main(String[] args) { System.out.println("Boucle for :"); for (int a = 3; a <= 10; a++) { System.out.println("a : " + a); } System.out.println("Boucle while :"); int b = 3; while (b <= 10) { System.out.println("b : " + b); b++; } System.out.println("Boucle do..while :"); int c = 3; do { System.out.println("c : " + c); c = c + 1; } while (c <= 10); } } |
[Précédent] |