Instructions de saut : break, continue et return

04 Sep 2019 04 Sep 2019 7048 vues ESSADDOUKI Mostafa 11 min de lecture
Introduction
1 Nouveautés de Java 11 2 Différences entre JDK, JRE et JVM 3 Structure d'un programme Java - Hello World 4 Mots clés et conventions de dénomination en Java 5 Types de données intégrés en Java 6 Les variables en Java 7 Classes enveloppe - Number, Integer, Double ... 8 Lire les entrées clavier en Java
Structures de contrôle
9 Les opérateurs en Java 10 Les structures conditionnelles en Java 11 Les boucles en Java 12 Instructions de contrôle de boucle - break, continue
Chaines de caractères
13 Les chaines en Java - API String 14 Les chaines en Java - StringBuffer et StringBuilder 15 Les expressions régulières en Java
Programmation OO
16 Objets et classes en Java 17 Modificateurs d'accès Java - public, private, protected et package 18 Méthodes et surcharge des méthodes en Java 19 les constructeurs en Java 20 L'héritage en Java 21 Classes abstraites en Java 22 Interfaces et héritage multiple en Java 23 Les classes imbriquées en Java 24 Les singletons en Java 25 Classes et méthodes génériques 26 Interface fonctionnelle et expressions Lambda en Java
Tableaux et collections
27 Les tableaux en Java 28 Classe Arrays - java.util.Arrays 29 Les listes dynamiques - java.util.ArrayList 30 Les listes chaînées en Java - java.util.LinkedList 31 HashSet en Java - java.util.HashSet 32 HashMap en Java - java.util.HashMap
Gestion des fichiers
33 Comprendre les fichiers informatiques 34 Utilisation des classes Path et Files en Java 35 Lecture et écriture dans un fichier en Java 36 Fichiers à accès aléatoire en Java
Gestion d'exceptions
37 Gestion d'exceptions en Java 38 Créez vos propres classes d'exception en Java
Programmation concurrente
39 Introduction à la programmation concurrente en Java - Multi-threads 40 classe java.lang.Thread 41 Synchronisation des threads en Java
Cours Java pour les débutants — Étape 12 sur 41

Instructions de saut : break, continue et return

  Prérequis

Maîtriser les boucles (for, while, do-while) et la structure switch. Comprendre la notion de méthode et de valeur de retour.

  Objectifs

Comprendre et utiliser les trois instructions de saut Java : break, continue et return. Savoir les distinguer et les appliquer pour contrôler précisément le flux d'exécution d'un programme.

1. Vue d'ensemble

Définition — Instructions de saut Les instructions de saut modifient le flux séquentiel d'exécution en transférant le contrôle à une autre partie du programme. Java en propose trois : break, continue et return.
Instruction Contexte d'utilisation Effet
break Boucle, switch, bloc étiqueté Quitte immédiatement la structure courante
continue Boucle uniquement Ignore le reste de l'itération courante et passe à la suivante
return Corps d'une méthode Termine la méthode et renvoie une valeur à l'appelant
break vs continue break sort complètement de la boucle — les itérations restantes sont abandonnées. continue saute l'itération courante mais la boucle continue avec la suivante.

2. L'instruction break

Définition — break L'instruction break interrompt immédiatement la structure dans laquelle elle se trouve (boucle ou switch) et transfère le contrôle à l'instruction qui suit cette structure.

2.1 break dans un switch

Sans break, l'exécution continue dans les case suivants (fall-through). Le break met fin au switch après l'exécution du cas correspondant.

  Exemple 1 — break dans un switch

public class BreakSwitch {
    public static void main(String[] args) {
        int jour = 3;

        switch (jour) {
            case 1: System.out.println("Lundi");    break;
            case 2: System.out.println("Mardi");    break;
            case 3: System.out.println("Mercredi"); break;
            case 4: System.out.println("Jeudi");    break;
            case 5: System.out.println("Vendredi"); break;
            case 6: System.out.println("Samedi");   break;
            case 7: System.out.println("Dimanche"); break;
            default: System.out.println("Jour invalide");
        }
    }
}
Sortie
Mercredi

2.2 break dans une boucle

  Exemple 2 — Sortir d'une boucle for avec break

public class BreakBoucle {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            if (i == 3) {
                break; // on quitte la boucle dès que i vaut 3
            }
            System.out.println("i = " + i);
        }
        System.out.println("Après la boucle");
    }
}
Sortie
i = 0
i = 1
i = 2
Après la boucle

2.3 break dans une boucle imbriquée

break et boucles imbriquées Dans des boucles imbriquées, break ne quitte que la boucle la plus interne — la boucle externe continue normalement ses itérations.

  Exemple 3 — break dans une boucle imbriquée

public class BreakImbriquee {
    public static void main(String[] args) {
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                if (j == 1) {
                    break; // quitte uniquement la boucle interne (j)
                }
                System.out.println("j = " + j);
            }
            System.out.println("i = " + i);
        }
    }
}
Sortie
j = 0
i = 0
j = 0
i = 1
j = 0
i = 2

2.4 break étiqueté — sortir de plusieurs boucles imbriquées

Étiquette (label) Java permet d'associer une étiquette à un bloc ou à une boucle, puis d'utiliser break étiquette pour sortir directement de la structure désignée, même si elle est externe. C'est l'alternative Java au goto.
   
Syntaxe — break étiqueté Java
etiquette: {
    // bloc ou boucle
    break etiquette; // saute à la fin du bloc étiqueté
}

  Exemple 4 — break étiqueté (équivalent goto)

public class BreakLabel {
    public static void main(String[] args) {
        int i = 4;

        bloc1: {
            bloc2: {
                System.out.println("début bloc2");
                if (i == 4) {
                    break bloc1; // saute directement à la fin de bloc1
                }
                System.out.println("fin bloc2"); // jamais atteint
            }
            System.out.println("fin bloc1"); // jamais atteint
        }
        System.out.println("fin du programme");
    }
}
Sortie
début bloc2
fin du programme

  Exemple 5 — Sortir de deux boucles imbriquées avec étiquette

public class BreakLabelBoucle {
    public static void main(String[] args) {
        // Rechercher la position de la valeur 5 dans une matrice
        int[][] matrice = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        int ligne = -1, colonne = -1;

        recherche: // étiquette sur la boucle externe
        for (int i = 0; i < matrice.length; i++) {
            for (int j = 0; j < matrice[i].length; j++) {
                if (matrice[i][j] == 5) {
                    ligne    = i;
                    colonne  = j;
                    break recherche; // quitte les DEUX boucles
                }
            }
        }
        System.out.println("Trouvé à [" + ligne + "][" + colonne + "]");
    }
}
Sortie
Trouvé à [1][1]
Quand utiliser les étiquettes ? Les étiquettes sont utiles lorsqu'on doit sortir de plusieurs niveaux de boucles imbriquées d'un coup, par exemple lors d'une recherche dans une matrice ou un graphe. Restez sobre : un usage excessif rend le code difficile à lire.

3. L'instruction continue

Définition — continue L'instruction continue abandonne le reste du corps de la boucle pour l'itération courante et passe directement à l'itération suivante. La boucle n'est pas terminée — elle continue.

  Exemple 6 — Sauter une valeur avec continue

public class ContinueEx {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            if (i == 2) {
                continue; // saute l'affichage pour i == 2
            }
            System.out.println("i = " + i);
        }
    }
}
Sortie
i = 0
i = 1
i = 3
i = 4

3.1 continue étiqueté

Comme break, continue peut être combiné avec une étiquette pour passer à l'itération suivante d'une boucle externe depuis une boucle interne.

  Exemple 7 — continue étiqueté sur boucle externe

public class ContinueLabel {
    public static void main(String[] args) {
        // Afficher uniquement les paires (i,j) où i != j
        externe:
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                if (i == j) {
                    continue externe; // passe à l'itération suivante de i
                }
                System.out.println("(" + i + ", " + j + ")");
            }
        }
    }
}
Sortie
(1, 0)
(2, 0)
(2, 1)

3.2 Comparaison break vs continue

Critère break continue
Effet sur la boucle Termine complètement la boucle Passe à l'itération suivante
Itérations restantes Abandonnées Continuent normalement
Exécution après la boucle Immédiate Seulement quand la condition devient fausse
Contexte Boucle + switch Boucle uniquement

  Exemple 8 — Comparaison côte à côte

// Avec break — s'arrête à i == 3
System.out.println("--- break ---");
for (int i = 0; i < 6; i++) {
    if (i == 3) break;
    System.out.print(i + " ");
}
// Sortie : 0 1 2

System.out.println("\n--- continue ---");
// Avec continue — saute i == 3, poursuit jusqu'à 5
for (int i = 0; i < 6; i++) {
    if (i == 3) continue;
    System.out.print(i + " ");
}
// Sortie : 0 1 2 4 5
Sortie
--- break ---
0 1 2
--- continue ---
0 1 2 4 5

4. L'instruction return

Définition — return L'instruction return termine l'exécution de la méthode courante et renvoie le contrôle à la méthode appelante. Elle peut optionnellement retourner une valeur au type déclaré de la méthode.
   
Syntaxe — return Java
// Méthode sans valeur de retour (void)
return;

// Méthode avec valeur de retour
return expression;

  Exemple 9 — return pour quitter un main()

public class ReturnEx {
    public static void main(String[] args) {
        int i = 2;

        if (i == 2) {
            System.out.println("i vaut 2 — on quitte.");
            return; // termine main() ici
        }

        // Cette ligne n'est jamais atteinte si i == 2
        System.out.println("Fin normale du programme.");
    }
}
Sortie
i vaut 2 — on quitte.

  Exemple 10 — return dans une méthode avec valeur de retour

public class ReturnValeur {

    // Méthode qui retourne le maximum de deux entiers
    static int max(int a, int b) {
        if (a > b) {
            return a; // return anticipé
        }
        return b;     // return en fin de méthode
    }

    // Méthode qui vérifie si un entier est premier
    static boolean estPremier(int n) {
        if (n < 2) return false;
        for (int i = 2; i <= Math.sqrt(n); i++) {
            if (n % i == 0) return false; // sortie anticipée si divisible
        }
        return true;
    }

    public static void main(String[] args) {
        System.out.println("max(5, 9) = " + max(5, 9));
        System.out.println("7 est premier ? " + estPremier(7));
        System.out.println("9 est premier ? " + estPremier(9));
    }
}
Sortie
max(5, 9) = 9
7 est premier ? true
9 est premier ? false
Return anticipé — style de code Utiliser plusieurs return pour gérer les cas particuliers en début de méthode (early return) réduit l'imbrication et améliore la lisibilité :
// Style avec early return — plus lisible
static double diviser(double a, double b) {
    if (b == 0) return 0; // cas particulier traité en premier
    return a / b;
}

// Style avec if-else imbriqué — moins lisible
static double diviser2(double a, double b) {
    if (b != 0) {
        return a / b;
    } else {
        return 0;
    }
}
Code mort — instructions après return Toute instruction placée après un return dans le même bloc est inaccessible et provoque une erreur de compilation :
static int exemple() {
    return 42;
    System.out.println("jamais atteint"); // Erreur : code mort
}

5. Exercice

Recherche et filtrage dans un tableau

Niveau : Débutant

Écrire un programme Java qui exploite les trois instructions de saut sur un tableau d'entiers.

Travail demandé

  1. Écrire une méthode static int chercherPremierNegatif(int[] T) qui retourne la première valeur négative trouvée dans T, ou 0 si aucune valeur négative n'existe. Utiliser break pour sortir dès la première trouvaille, et return pour retourner le résultat.
  2. Écrire une méthode static void afficherPositifs(int[] T) qui affiche uniquement les valeurs strictement positives du tableau. Utiliser continue pour ignorer les valeurs négatives ou nulles.
  3. Dans le main, tester ces deux méthodes avec le tableau {4, -1, 7, 0, -3, 5} et afficher les résultats.
Sortie attendue
Sortie
Premier négatif : -1
Valeurs positives : 4 7 5
Contraintes
  • Utiliser break dans chercherPremierNegatif()
  • Utiliser continue dans afficherPositifs()
  • Utiliser return dans les deux méthodes

  L'essentiel en bref

Java dispose de trois instructions de saut. break quitte immédiatement la boucle ou le switch courant ; combiné avec une étiquette, il permet de sortir de plusieurs niveaux de boucles imbriquées en une seule instruction. continue saute le reste de l'itération courante et passe à la suivante, sans quitter la boucle ; il accepte lui aussi une étiquette pour cibler une boucle externe. return termine la méthode courante et retourne une valeur à l'appelant ; son usage anticipé (early return) simplifie la gestion des cas particuliers et réduit l'imbrication.

Sortie
// La sortie apparaîtra ici…
Prêt · Ctrl+Entrée pour exécuter

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.