L'instruction break en Java
Quittez les boucles et les blocs switch en Java avec l'instruction break, y compris le break avec étiquette.
break est la sortie de secours. Il arrête immédiatement la boucle ou le bloc switch le plus proche dans lequel il se trouve, et l'exécution continue avec ce qui suit. Utilisez-le quand le travail de la boucle est terminé et qu'il n'y a plus de raison de continuer à itérer.
Sortir d'une boucle
for (int i = 0; i < 100; i++) {
if (i == 5) {
break;
}
System.out.println(i);
}
// continues hereAffiche 0 1 2 3 4 et quitte. La condition de la boucle (i < 100) et la mise à jour (i++) sont abandonnées dès que break s'exécute.
Un cas d'utilisation typique : rechercher un élément et s'arrêter dès qu'on le trouve :
int[] nums = {3, 7, 2, 8, 5};
int target = 8;
int foundAt = -1;
for (int i = 0; i < nums.length; i++) {
if (nums[i] == target) {
foundAt = i;
break;
}
}
System.out.println("found at index: " + foundAt);Sans break, vous continueriez à vérifier des éléments dont vous savez déjà qu'ils ne sont pas la réponse.
break dans un while
Fonctionne de manière identique dans while et do/while :
int n = 1;
while (true) {
if (n > 1000) {
break;
}
n *= 2;
}
System.out.println(n); // 1024while (true) { ... break; } est le modèle standard pour « boucler jusqu'à ce qu'une condition décidée à l'intérieur du corps soit remplie ».
break dans un switch
Dans une instruction switch traditionnelle, break quitte le switch — empêchant ainsi de tomber en cascade dans le cas suivant. Vous l'avez vu dans le chapitre sur switch :
switch (cmd) {
case "start": startServer(); break;
case "stop": stopServer(); break;
default: help(); break;
}Les expressions switch sous forme de flèche couvertes dans les expressions switch ne font pas de cascade, donc elles n'ont pas besoin de break.
Un switch placé à l'intérieur d'une boucle est un piège classique : un break écrit pour la boucle quitte en réalité le switch et laisse la boucle continuer à s'exécuter. break cible toujours la boucle ou le switch le plus proche qui l'englobe.
for (String cmd : commands) {
switch (cmd) {
case "quit":
break; // exits the switch, NOT the for loop — the loop keeps going
default:
process(cmd);
}
}Pour quitter la boucle depuis l'intérieur du switch, vous avez besoin d'un break avec étiquette (présenté ci-dessous) ou d'un indicateur que la boucle vérifie ensuite.
break ne quitte qu'un seul niveau
break quitte la boucle ou le switch le plus proche qui l'englobe. Dans des boucles imbriquées, il ne quitte que la boucle intérieure :
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (j == 1) break; // only exits the inner loop
System.out.println(i + "," + j);
}
}Sortie :
0,0
1,0
2,0Pour quitter toutes les boucles imbriquées en même temps, utilisez un break avec étiquette — couvert dans les instructions étiquetées :
outer:
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == 1 && j == 1) break outer;
System.out.println(i + "," + j);
}
}break vs return
Si le travail qui suit la boucle est important, utilisez break. Si la méthode n'a plus rien à faire une fois la boucle terminée, retournez directement avec return :
for (int i = 0; i < nums.length; i++) {
if (nums[i] == target) {
return i; // shorter than break + return after the loop
}
}
return -1;Les deux sont corrects. return est souvent le choix le plus élégant pour les méthodes de recherche.
Un exemple pratique
Et ensuite
break quitte entièrement la boucle. Pour passer simplement à l'itération suivante sans quitter la boucle, utilisez continue.