4. Boucles¶
Boucle while¶
La boucle while s’exécute tant que sa condition est vraie :
public class ExempleWhile {
public static void main(String[] args) {
int compteur = 0;
while (compteur < 5) {
System.out.println("Compteur: " + compteur);
compteur++;
}
// Exemple avec validation
int nombre = 100;
while (nombre > 1) {
if (nombre % 2 == 0) {
nombre = nombre / 2;
} else {
nombre = nombre * 3 + 1;
}
System.out.println("Nombre actuel: " + nombre);
}
}
}
Boucle do-while¶
La boucle do-while s’exécute au moins une fois :
public class ExempleDoWhile {
public static void main(String[] args) {
int compteur = 0;
do {
System.out.println("Itération: " + compteur);
compteur++;
} while (compteur < 3);
// Exemple avec accumulation
int somme = 0;
int nombre = 1;
do {
somme += nombre;
nombre++;
} while (nombre <= 5);
System.out.println("Somme finale: " + somme);
}
}
Boucle for¶
Boucle for classique :
public class ExempleFor {
public static void main(String[] args) {
// Boucle simple
for (int i = 0; i < 5; i++) {
System.out.println("Index: " + i);
}
// Boucle avec pas différent
for (int i = 0; i <= 10; i += 2) {
System.out.println("Nombre pair: " + i);
}
// Boucle décroissante
for (int i = 5; i > 0; i--) {
System.out.println("Compte à rebours: " + i);
}
}
}
Boucle for-each :
public class ExempleForEach {
public static void main(String[] args) {
// Avec un tableau
int[] nombres = {1, 2, 3, 4, 5};
for (int nombre : nombres) {
System.out.println("Valeur: " + nombre);
}
// Avec une collection de chaînes
String[] fruits = {"pomme", "banane", "orange"};
for (String fruit : fruits) {
System.out.println("Fruit: " + fruit);
}
}
}
Exemple pratique combiné¶
public class AnalyseNotes {
public static void main(String[] args) {
int[] notes = {85, 92, 78, 65, 88, 72};
int somme = 0;
int noteMax = Integer.MIN_VALUE;
int noteMin = Integer.MAX_VALUE;
// Utilisation de for-each pour le calcul
for (int note : notes) {
somme += note;
noteMax = Math.max(noteMax, note);
noteMin = Math.min(noteMin, note);
}
double moyenne = (double) somme / notes.length;
// Utilisation de while pour l'analyse
int i = 0;
int notesSupMoyenne = 0;
while (i < notes.length) {
if (notes[i] > moyenne) {
notesSupMoyenne++;
}
i++;
}
// Affichage des statistiques
System.out.printf("Moyenne: %.2f%n", moyenne);
System.out.printf("Note maximale: %d%n", noteMax);
System.out.printf("Note minimale: %d%n", noteMin);
System.out.printf("Nombre de notes supérieures à la moyenne: %d%n", notesSupMoyenne);
// Utilisation de for pour afficher les notes avec leur statut
for (int j = 0; j < notes.length; j++) {
String statut = notes[j] >= moyenne ? "≥ moyenne" : "< moyenne";
System.out.printf("Note %d: %d (%s)%n", j + 1, notes[j], statut);
}
}
}
Instructions de contrôle de boucle¶
public class ControleBoucles {
public static void main(String[] args) {
// Exemple de break
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // Sort de la boucle
}
System.out.println("Valeur: " + i);
}
// Exemple de continue
for (int i = 0; i < 5; i++) {
if (i == 2) {
continue; // Passe à l'itération suivante
}
System.out.println("Nombre: " + i);
}
// Exemple avec étiquette (label)
exterieur:
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == 1 && j == 1) {
break exterieur; // Sort des deux boucles
}
System.out.printf("i=%d, j=%d%n", i, j);
}
}
}
}
Pourquoi éviter while (true) et les break et continue si possible ?¶
- Lisibilité : Une boucle
while Truepeut rendre le code moins clair, car elle ne montre pas explicitement la condition de sortie. - Maintenabilité : Dans un code complexe, il est facile d’oublier un
breakou uncontinue, ou placercontinueà la place debreak, ce qui peut entraîner des boucles infinies ou des boucles qui ne fonctionnent pas correctement. - Style : Certaines équipes de développement préfèrent éviter les boucles infinies explicites et les
breaketcontinuesi possible pour des raisons de style et de robustesse.
Attention
Règle générale : Évitez les boucles infinies explicites, sauf dans des cas très précis où il n’y a aucune autre option possible. Exemple : un serveur qui doit accepter un nombre de requêtes indéterminé, et qui doit s’exécuter pour un temps indéterminé, sans condition d’arrêt précise, donc qui doit s’exécuter le plus longtemps possible.
Attention également aux return
L’utilisation de return dans une boucle peut également rendre le code moins lisible et plus difficile à maintenir,
car il peut être difficile de suivre le flux de contrôle lorsque des return sont utilisés dans des boucles
imbriquées. Il est souvent préférable d’utiliser des variables pour stocker les résultats et de les retourner
en dehors de la boucle, plutôt que de retourner directement à partir de la boucle.
Utilisation de l’IA
Page rédigée en partie avec l’aide d’un assistant IA. L’IA a été utilisée pour générer des explications, des exemples et/ou des suggestions de structure. Toutes les informations ont été vérifiées, éditées et complétées par l’auteur.