CodeGym /Cours /JAVA 25 SELF /Switch classique : syntaxe, exemples

Switch classique : syntaxe, exemples

JAVA 25 SELF
Niveau 10, Leçon 3
Disponible

1. Introduction

Imaginez que vous écrivez un programme pour un café. L’utilisateur peut choisir une boisson, et vous devez réagir à ce choix. On peut bien sûr enchaîner des if-else if-else, mais ce n’est pas très élégant :

if (choice == 1) 
{
    System.out.println("Vous avez choisi un espresso.");
} 
else if (choice == 2) 
{
    System.out.println("Vous avez choisi un cappuccino.");
} 
else if (choice == 3) 
{
    System.out.println("Vous avez choisi un latte.");
} 
else 
{
    System.out.println("Cette boisson n’existe pas.");
}

Avouez que c’est lourd. Et s’il y a 10 ou 20 variantes ? C’est là que l’instruction switch vient à la rescousse : elle permet d’implémenter de façon élégante et compacte un choix parmi de nombreuses options selon la valeur d’une variable.

Syntaxe du switch classique

La syntaxe de switch en Java ressemble à ceci :


switch (expression) 
{
    case value1:
        // actions si expression == value1
        break;
    case value2:
        // actions si expression == value2
        break;
    ...
    default:
        // actions si aucune correspondance avec un case
        break;
}
Syntaxe de l’instruction switch en Java

Éléments clés :

  • switch (expression) — l’expression dont le résultat est comparé à chaque case.
  • case valeur: — une option à comparer avec l’expression.
  • break; — met fin à l’exécution du bloc switch (sinon — « fall-through » vers le case suivant).
  • default: — s’exécute s’il n’y a aucune correspondance avec un case.

2. Exemples d’utilisation de switch

Exemple 1 : classique du genre — choix de boisson

Implémentons un menu pour un café :

import java.util.Scanner;

public class CoffeeShop 
{
    public static void main(String[] args) 
    {
        Scanner console = new Scanner(System.in);

        System.out.println("Choisissez une boisson:");
        System.out.println("1 - Espresso");
        System.out.println("2 - Cappuccino");
        System.out.println("3 - Latte");
        int choice = console.nextInt();

        switch (choice) 
        {
            case 1:
                System.out.println("Vous avez choisi un espresso.");
                break;
            case 2:
                System.out.println("Vous avez choisi un cappuccino.");
                break;
            case 3:
                System.out.println("Vous avez choisi un latte.");
                break;
            default:
                System.out.println("Cette boisson n’existe pas.");
                break;
        }
    }
}

Ce qui se passe :

  • L’utilisateur saisit le numéro de la boisson.
  • La valeur de la variable choice est comparée à chaque case.
  • En cas de correspondance — le bloc correspondant s’exécute, puis break met fin à switch.
  • Si aucune correspondance — default s’exécute.

Exemple 2 : switch sur des chaînes

On ne peut pas utiliser beaucoup de types dans switch, mais les chaînes — oui ! C’est pratique pour des menus de commandes :

import java.util.Scanner;

public class CommandMenu 
{
    public static void main(String[] args) 
    {
        Scanner console = new Scanner(System.in);

        System.out.println("Saisissez une commande (start, stop, pause):");
        String command = console.nextLine();

        switch (command) 
        {
            case "start":
                System.out.println("Démarrage du programme!");
                break;
            case "stop":
                System.out.println("Arrêt du programme.");
                break;
            case "pause":
                System.out.println("Pause.");
                break;
            default:
                System.out.println("Commande inconnue.");
                break;
        }
    }
}

À noter : la comparaison de chaînes dans switch est sensible à la casse ! "Start" et "start" sont des chaînes différentes.

3. Quels types le switch classique prend-il en charge ?

Dans le switch classique, seuls certains types sont autorisés :

  • Types entiers primitifs : byte, short, char, int
  • Énumérations : enum (nous en parlerons au prochain cours)
  • Chaînes : String — comparaison sensible à la casse

Interdit d’utiliser : boolean, float, double, les tableaux, les objets arbitraires (sauf enum et String).

Exemple avec char

char grade = 'B';

switch (grade) 
{
    case 'A':
        System.out.println("Excellent!");
        break;
    case 'B':
        System.out.println("Bien.");
        break;
    case 'C':
        System.out.println("Satisfaisant.");
        break;
    default:
        System.out.println("Essayez encore.");
        break;
}

4. Break obligatoire : que se passe-t-il si on l’oublie ?

L’erreur la plus fréquente des débutants — oublier break;. Voyons ce qui se passe :

int day = 2;

switch (day) 
{
    case 1:
        System.out.println("Lundi");
        break;
    case 2:
        System.out.println("Mardi");
    case 3:
        System.out.println("Mercredi");
        break;
    default:
        System.out.println("Jour inconnu");
        break;
}

Résultat :

Mardi
Mercredi

Pourquoi ? Parce qu’après case 2 il n’y a pas de break, et l’exécution « tombe » dans le case suivant (c’est ce qu’on appelle le fall-through). Parfois c’est utile, mais le plus souvent — une erreur.

5. Regroupement des case : quand plusieurs valeurs ont le même comportement

Si plusieurs valeurs doivent avoir le même comportement, on peut les écrire à la suite :

int month = 1;

switch (month) 
{
    case 12:
    case 1:
    case 2:
        System.out.println("Hiver");
        break;
    case 3:
    case 4:
    case 5:
        System.out.println("Printemps");
        break;
    case 6:
    case 7:
    case 8:
        System.out.println("Été");
        break;
    case 9:
    case 10:
    case 11:
        System.out.println("Automne");
        break;
    default:
        System.out.println("Mois inconnu");
        break;
}

Ici : si month vaut 12, 1 ou 2, le programme affichera "Hiver".

6. Comparaison : switch et if-else

Scénario if-else switch
Beaucoup d’options Chaîne longue, moins lisible Court, toutes les options sont visibles d’un coup d’œil
Comparaison d’intervalles Possible (if (x > 5 && x < 10)) Impossible, uniquement des valeurs exactes
Types pris en charge Tous Uniquement certains (voir ci-dessus)
Piège lié à break Non Oui, il faut impérativement veiller aux break

7. Erreurs courantes avec switch

Erreur n° 1 : oubli de break
La cause la plus fréquente des bugs : vous avez oublié break — et le code exécute un case inattendu.

Erreur n° 2 : type non pris en charge
Vous essayez d’utiliser double, float ou boolean — le compilateur dira « interdit ».

Erreur n° 3 : chaînes avec casse différente
L’utilisateur saisit "Start", et vous attendez "start" — switch ne correspondra pas. Mieux vaut normaliser la casse des chaînes en amont :

switch (command.toLowerCase()) 
{
    case "start":
        // ...
}

Erreur n° 4 : une variable dans un case au lieu d’une constante
Seules des constantes sont autorisées dans un case. Si vous utilisez une variable — il y aura une erreur de compilation.

Erreur n° 5 : case en double
Deux valeurs de case identiques — le compilateur ne vous le pardonnera pas.

1
Mission
JAVA 25 SELF, niveau 10, leçon 3
Bloqué
Bureau intelligent : détermination du jour 📅
Bureau intelligent : détermination du jour 📅
1
Mission
JAVA 25 SELF, niveau 10, leçon 3
Bloqué
Panneau de contrôle du robot 🤖
Panneau de contrôle du robot 🤖
1
Mission
JAVA 25 SELF, niveau 10, leçon 3
Bloqué
Guide saisonnier par mois 🍂
Guide saisonnier par mois 🍂
1
Mission
JAVA 25 SELF, niveau 10, leçon 3
Bloqué
Calculatrice de poche ➕
Calculatrice de poche ➕
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION