Les boucles en Java
Prérequis
Maîtriser les structures conditionnelles (if, while). Connaître les opérateurs arithmétiques et relationnels. Avoir des notions de base sur les tableaux.
Objectifs
Comprendre le principe d'itération. Maîtriser les trois boucles Java : for, while et do-while. Savoir choisir la boucle adaptée selon le contexte et éviter les boucles infinies.
1. Principe des boucles
| Type | Boucles concernées | Condition testée | Exécution minimale |
|---|---|---|---|
| Entrée contrôlée | for, while |
Avant le corps | 0 fois (si condition fausse dès le départ) |
| Sortie contrôlée | do-while |
Après le corps | 1 fois minimum (toujours) |
false s'exécute indéfiniment et bloque le programme. Les causes les plus fréquentes : oublier la mise à jour de la variable de contrôle, ou utiliser un opérateur de comparaison incorrect.
// Boucle infinie — i n'est jamais mis à jour
while (i < 5) {
System.out.println(i); // i reste à 0 pour toujours !
}
2. La boucle for
for est une structure de répétition à nombre d'itérations connu à l'avance. Elle regroupe dans son en-tête les trois composantes : initialisation, condition et mise à jour.
for (initialisation ; condition ; mise à jour) {
// bloc d'instructions répété tant que condition == true
}
2.1 Fonctionnement pas à pas
| Étape | Description | Exemple |
|---|---|---|
| 1 — Initialisation | Exécutée une seule fois avant la boucle | int i = 0 |
| 2 — Condition | Testée avant chaque itération. Si false, la boucle s'arrête |
i < 5 |
| 3 — Corps | Exécuté si la condition est true |
System.out.println(i) |
| 4 — Mise à jour | Exécutée après chaque itération, puis retour à l'étape 2 | i++ |
Exemple 1 — Afficher les entiers de 0 à 4
public class BoucleFor {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
System.out.println("i = " + i);
}
}
}
i = 0 i = 1 i = 2 i = 3 i = 4
Complément — Variantes de la boucle for
// Décompte : de 10 à 1
for (int i = 10; i >= 1; i--) {
System.out.print(i + " ");
}
// Sortie : 10 9 8 7 6 5 4 3 2 1
// Pas de 2
for (int i = 0; i <= 10; i += 2) {
System.out.print(i + " ");
}
// Sortie : 0 2 4 6 8 10
// Variable de boucle inaccessible après la boucle
// int j = i; // Erreur : i n'existe plus ici
for (int i = 0) n'existe que dans la boucle. Elle n'est pas accessible après l'accolade fermante. Pour y accéder après, déclarez-la avant la boucle.3. La boucle for-each (for améliorée)
for-each parcourt séquentiellement tous les éléments d'un tableau ou d'une collection sans gérer d'index manuellement. Elle rend le code plus lisible et moins sujet aux erreurs.
for (type element : tableau_ou_collection) {
// traitement sur element
}
Exemple 2 — Parcourir un tableau avec for-each
public class BoucleForEach {
public static void main(String[] args) {
int[] T = {3, 6, 7, 2, 1};
for (int elem : T) {
System.out.println(elem);
}
}
}
3 6 7 2 1
3.1 Comparaison for classique vs for-each
| Critère | for classique |
for-each |
|---|---|---|
| Accès à l'index | Oui (i) |
Non |
| Modification des éléments | Oui (T[i] = val) |
Non (copie locale) |
| Parcours partiel | Oui (plage d'indices) | Non (tout le tableau) |
| Lisibilité | Moyenne | Excellente |
| Risque d'erreur d'index | Possible (ArrayIndexOutOfBoundsException) |
Aucun |
for-each, la variable elem est une copie locale de l'élément. Modifier elem ne modifie pas le tableau original :
int[] T = {1, 2, 3};
for (int elem : T) {
elem *= 2; // Ne modifie PAS T !
}
// T est toujours {1, 2, 3}
// Pour modifier, utiliser le for classique :
for (int i = 0; i < T.length; i++) {
T[i] *= 2; // Modifie T[i] correctement
}
4. La boucle while
while répète un bloc tant que sa condition est true. La condition est évaluée avant chaque itération : si elle est fausse dès le départ, le corps n'est jamais exécuté.
initialisation;
while (condition) {
// corps de la boucle
mise à jour;
}
Exemple 3 — Afficher les entiers de 0 à 4 avec while
public class BoucleWhile {
public static void main(String[] args) {
int i = 0; // initialisation
while (i < 5) { // condition
System.out.println("i = " + i);
i++; // mise à jour
}
}
}
i = 0 i = 1 i = 2 i = 3 i = 4
Application — Lecture jusqu'à saisie valide
Le while est particulièrement adapté quand le nombre d'itérations dépend d'une condition externe (saisie utilisateur, lecture de fichier…) :
import java.util.Scanner;
Scanner sc = new Scanner(System.in);
int saisie = -1;
while (saisie < 0 || saisie > 100) {
System.out.print("Entrez une note entre 0 et 100 : ");
saisie = sc.nextInt();
}
System.out.println("Note valide : " + saisie);
5. La boucle do-while
do-while exécute le corps de la boucle au moins une fois, puis évalue la condition. Si elle est true, le corps est répété. La condition est testée en sortie de boucle.
initialisation;
do {
// corps de la boucle
mise à jour;
} while (condition); // ← point-virgule obligatoire !
do-while se termine par } while (condition);. Le point-virgule après la parenthèse fermante est obligatoire. Son absence provoque une erreur de compilation.Exemple 4 — do-while : toujours exécuté au moins une fois
public class BoucleDoWhile {
public static void main(String[] args) {
int i = 0; // initialisation
do {
System.out.println("i = " + i);
i++; // mise à jour
} while (i < 5); // condition
}
}
i = 0 i = 1 i = 2 i = 3 i = 4
Exemple 5 — Différence while vs do-while (condition fausse dès le départ)
int i = 10;
// while : condition false dès le départ → corps jamais exécuté
while (i < 5) {
System.out.println("while : " + i);
}
System.out.println("Après while : aucune itération");
// do-while : corps exécuté UNE fois avant de tester
do {
System.out.println("do-while : " + i);
} while (i < 5);
System.out.println("Après do-while : une itération");
Après while : aucune itération do-while : 10 Après do-while : une itération
Application — Menu interactif
Le do-while est idéal pour les menus : le menu doit toujours s'afficher au moins une fois avant de vérifier si l'utilisateur veut quitter.
import java.util.Scanner;
Scanner sc = new Scanner(System.in);
int choix;
do {
System.out.println("=== MENU ===");
System.out.println("1. Afficher");
System.out.println("2. Calculer");
System.out.println("0. Quitter");
System.out.print("Votre choix : ");
choix = sc.nextInt();
} while (choix != 0);
System.out.println("Au revoir !");
6. Instructions de contrôle de boucle
6.1 break — sortir d'une boucle
break interrompt immédiatement la boucle courante et transfère le contrôle à l'instruction qui suit la boucle.
// Chercher la première valeur négative dans un tableau
int[] T = {3, 5, -2, 7, 1};
int premierNegatif = -1;
for (int val : T) {
if (val < 0) {
premierNegatif = val;
break; // sortir dès la première valeur négative trouvée
}
}
System.out.println("Premier négatif : " + premierNegatif);
Premier négatif : -2
6.2 continue — passer à l'itération suivante
continue ignore le reste du corps de la boucle pour l'itération courante et passe directement à la prochaine évaluation de la condition.
// Afficher uniquement les entiers pairs de 0 à 9
for (int i = 0; i < 10; i++) {
if (i % 2 != 0) {
continue; // ignorer les impairs
}
System.out.print(i + " ");
}
0 2 4 6 8
7. Boucles imbriquées
Exemple 6 — Table de multiplication
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 5; j++) {
System.out.printf("%3d", i * j);
}
System.out.println(); // retour à la ligne après chaque ligne
}
1 2 3 4 5 2 4 6 8 10 3 6 9 12 15
8. Choisir la bonne boucle
- Utilisez
forquand le nombre d'itérations est connu à l'avance (parcourir un tableau de taille connue, répéter N fois). - Utilisez
for-eachpour parcourir séquentiellement un tableau ou une collection sans besoin de l'index. - Utilisez
whilequand le nombre d'itérations est inconnu mais la condition d'arrêt est connue (lecture jusqu'à EOF, attente d'une condition). - Utilisez
do-whilequand le corps doit s'exécuter au moins une fois (menu, validation de saisie).
9. Exercice
Statistiques d'un tableau
Écrire un programme Java qui calcule et affiche plusieurs statistiques sur un tableau d'entiers donné.
Travail demandé
- Utiliser une boucle
for-eachpour calculer la somme des éléments. - Utiliser une boucle
forclassique pour trouver le maximum et son index. - Utiliser une boucle
whilepour compter le nombre d'éléments strictement positifs. - Calculer et afficher la moyenne (avec deux décimales).
Somme : 18 Maximum : 8 (indice 2) Positifs : 4 Moyenne : 3.00
- Utiliser obligatoirement les trois types de boucles (
for-each,forclassique,while) - Afficher la moyenne avec
printf("%.2f", ...) - Initialiser le maximum avec le premier élément du tableau
public class StatistiquesTableau {
public static void main(String[] args) {
int[] T = {5, -3, 8, 2, -1, 7};
// ── 1. Somme avec for-each ────────────────────────
int somme = 0;
for (int elem : T) {
somme += elem;
}
// ── 2. Maximum et son indice avec for classique ───
int max = T[0];
int indMax = 0;
for (int i = 1; i < T.length; i++) {
if (T[i] > max) {
max = T[i];
indMax = i;
}
}
// ── 3. Nombre de positifs avec while ──────────────
int positifs = 0;
int j = 0;
while (j < T.length) {
if (T[j] > 0) positifs++;
j++;
}
// ── 4. Moyenne ────────────────────────────────────
double moyenne = (double) somme / T.length;
// ── Affichage ─────────────────────────────────────
System.out.println("Somme : " + somme);
System.out.println("Maximum : " + max + " (indice " + indMax + ")");
System.out.println("Positifs : " + positifs);
System.out.printf("Moyenne : %.2f%n", moyenne);
}
}
Somme : 18 Maximum : 8 (indice 2) Positifs : 4 Moyenne : 3.00
for-each: idéal pour calculer la somme — pas besoin de l'index.forclassique : indispensable pour trouver l'index du maximum.while: équivalent auforquand on veut séparer initialisation et condition.- Cast
(double): nécessaire avant la division pour obtenir un résultat décimal et non entier. T.length: propriété d'un tableau Java donnant sa taille — évite les erreurs d'index.
L'essentiel en bref
Java propose trois boucles principales. La boucle for est préférable quand le nombre d'itérations est connu à l'avance ; la variante for-each simplifie le parcours séquentiel de tableaux et collections. La boucle while convient quand la condition d'arrêt dépend d'un événement imprévisible — le corps peut ne jamais s'exécuter si la condition est fausse dès le départ. La boucle do-while garantit au moins une exécution du corps, idéale pour les menus et les validations de saisie. Les instructions break et continue permettent de contrôler finement le déroulement des itérations.
Discussion (0)
Soyez le premier à laisser un commentaire !
Laisser un commentaire
Votre commentaire sera visible après modération.