Les structures conditionnelles en Java

04 Sep 2019 04 Sep 2019 6966 vues ESSADDOUKI Mostafa 12 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 10 sur 41

Structures conditionnelles en Java

  Prérequis

Maîtriser les opérateurs relationnels (==, !=, >, <…) et logiques (&&, ||, !). Savoir déclarer et initialiser des variables Java.

  Objectifs

Comprendre et utiliser les quatre structures conditionnelles Java : if, if-else, if-else if-else et switch. Savoir choisir la structure adaptée selon le contexte.

1. Vue d'ensemble des structures conditionnelles

Définition — Structure conditionnelle Une structure conditionnelle évalue une ou plusieurs conditions (expressions booléennes) et exécute des blocs d'instructions différents selon que ces conditions sont vraies ou fausses. Elle permet au programme de prendre des décisions à l'exécution.
Structure Usage typique Nombre de branches
if Exécuter un bloc seulement si une condition est vraie 1
if-else Choisir entre deux alternatives 2
if-else if-else Choisir parmi plusieurs conditions mutuellement exclusives N
switch Tester une variable contre des valeurs constantes N (avec case)

2. Structure if

Définition — if L'instruction if évalue une condition. Si elle vaut true, le bloc d'instructions est exécuté. Si elle vaut false, le bloc est ignoré et l'exécution continue après le if.
   
Syntaxe — if Java
if (condition) {
    // instructions exécutées si condition == true
}

  Exemple 1 — Tester le signe d'un entier

public class TestIf {
    public static void main(String[] args) {
        int a = -3;

        if (a < 0) {
            System.out.println("la valeur de a est négative");
        }

        System.out.println("Good bye !");
    }
}
Sortie
la valeur de a est négative
Good bye !
Accolades facultatives pour une seule instruction Si le corps d'un if ne contient qu'une seule instruction, les accolades {} sont facultatives. Les deux formes suivantes sont équivalentes :
// Avec accolades
if (a < 0) {
    System.out.println("négatif");
}

// Sans accolades (une seule instruction)
if (a < 0)
    System.out.println("négatif");
Par bonne pratique, conservez toujours les accolades pour éviter des erreurs lors d'ajouts futurs d'instructions.

3. Structure if-else

Définition — if-else Le bloc else est exécuté lorsque la condition du if est false. L'un des deux blocs est toujours exécuté — jamais les deux.
   
Syntaxe — if-else Java
if (condition) {
    // instructions si condition == true
} else {
    // instructions si condition == false
}

  Exemple 2 — Positif ou négatif/nul

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

        if (a < 0) {
            System.out.println("la valeur de a est négative");
        } else {
            System.out.println("la valeur de a est positive ou nulle");
        }

        System.out.println("Good bye !");
    }
}
Sortie
la valeur de a est positive ou nulle
Good bye !
Opérateur ternaire — alternative compacte Pour les cas simples, l'opérateur ternaire ?: remplace avantageusement un if-else :
// if-else classique
String signe;
if (a < 0) signe = "négative";
else       signe = "positive ou nulle";

// Équivalent avec l'opérateur ternaire
String signe = (a < 0) ? "négative" : "positive ou nulle";
System.out.println("Valeur " + signe);

4. Structure if-else if-else

Définition — if-else if-else Cette structure permet de tester plusieurs conditions en cascade. Les conditions sont évaluées dans l'ordre : dès qu'une condition est vraie, son bloc est exécuté et les suivants sont ignorés. Le bloc else final est exécuté si aucune condition n'est vraie.
   
Syntaxe — if-else if-else Java
if (condition1) {
    // exécuté si condition1 == true
} else if (condition2) {
    // exécuté si condition1 == false ET condition2 == true
} else if (condition3) {
    // exécuté si condition1, condition2 == false ET condition3 == true
} else {
    // exécuté si toutes les conditions sont false
}

  Exemple 3 — Signe d'un entier (négatif / positif / nul)

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

        if (a < 0) {
            System.out.println("la valeur de a est négative");
        } else if (a > 0) {
            System.out.println("la valeur de a est positive");
        } else {
            System.out.println("la valeur de a est nulle");
        }

        System.out.println("Good bye !");
    }
}
Sortie
la valeur de a est positive
Good bye !

  Application — Mention selon une note

int note = 14;
String mention;

if (note >= 16) {
    mention = "Très bien";
} else if (note >= 14) {
    mention = "Bien";
} else if (note >= 12) {
    mention = "Assez bien";
} else if (note >= 10) {
    mention = "Passable";
} else {
    mention = "Insuffisant";
}

System.out.println("Mention : " + mention);
Sortie
Mention : Bien
Ordre des conditions Dans un if-else if, l'ordre des conditions est crucial. Tester d'abord note >= 10 avant note >= 14 capturerait toutes les notes à partir de 10 dans le premier bloc, rendant les suivants inatteignables. Commencez toujours par la condition la plus restrictive.

5. Structure if imbriquée

Définition — if imbriqué Il est possible d'imbriquer une instruction if-else à l'intérieur du corps d'une autre instruction if-else. Cela permet de tester des conditions hiérarchiques (une condition dépend d'une autre).

  Exemple 4 — Imbriquer des conditions

public class TestIfImbrique {
    public static void main(String[] args) {
        int a = -2;

        if (a <= 0) {
            // Condition imbriquée à l'intérieur du premier if
            if (a == 0) {
                System.out.println("la valeur de a est nulle");
            } else {
                System.out.println("la valeur de a est négative");
            }
        } else {
            System.out.println("la valeur de a est positive");
        }

        System.out.println("Good bye !");
    }
}
Sortie
la valeur de a est négative
Good bye !
Problème du else orphelin Sans accolades, un else est toujours associé au if le plus proche. Ce comportement peut provoquer des bugs difficiles à détecter :
// Apparence trompeuse : le else semble associé au premier if
if (a > 0)
    if (a > 10)
        System.out.println("a > 10");
else
    System.out.println("a <= 0 ?"); // NON ! associé à "if (a > 10)"

// Solution : toujours utiliser des accolades
if (a > 0) {
    if (a > 10) {
        System.out.println("a > 10");
    }
} else {
    System.out.println("a <= 0");
}

6. Structure switch

Définition — switch L'instruction switch compare une expression à une liste de valeurs constantes (case) et exécute le bloc correspondant. Elle est particulièrement lisible quand on teste une même variable contre de nombreuses valeurs fixes.
   
Syntaxe — switch Java
switch (expression) {
    case valeur1:
        // instructions
        break;
    case valeur2:
        // instructions
        break;
    case valeur3:
        // instructions
        break;
    default:
        // instructions si aucun case ne correspond
}

6.1 Règles du switch

Règles obligatoires du switch
  • L'expression du switch doit être de type byte, short, char, int, String ou enum.
  • Chaque valeur de case doit être une constante ou un littéral du même type que l'expression.
  • Le mot-clé break arrête l'exécution du switch. Sans break, l'exécution continue dans les case suivants (fall-through).
  • Le default est exécuté si aucun case ne correspond. Il est facultatif mais recommandé.

  Exemple 5 — Afficher le jour de la semaine

public class TestSwitch {
    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 (entre 1 et 7)");
        }
    }
}
Sortie
Mercredi

6.2 Le fall-through — regrouper des cases

L'absence de break permet d'exécuter plusieurs case consécutifs. Cette technique est utile pour regrouper des valeurs partageant le même comportement.

  Exemple 6 — Jour ouvré ou week-end

int jour = 6;

switch (jour) {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        System.out.println("Jour ouvré");
        break;
    case 6:
    case 7:
        System.out.println("Week-end");
        break;
    default:
        System.out.println("Jour invalide");
}
Sortie
Week-end

6.3 Switch avec String (Java 7+)

String saison = "Hiver";

switch (saison) {
    case "Printemps":
    case "Été":
        System.out.println("Saison chaude");
        break;
    case "Automne":
    case "Hiver":
        System.out.println("Saison froide");
        break;
    default:
        System.out.println("Saison inconnue");
}
Sortie
Saison froide

6.4 Switch expression (Java 14+)

  Complément — Nouvelle syntaxe switch expression

Depuis Java 14, le switch peut être utilisé comme une expression (retourne une valeur). La flèche -> remplace les case: et break, rendant le code plus concis et sûr (pas de fall-through accidentel).

int jour = 3;

// Switch expression — retourne directement une valeur
String nomJour = switch (jour) {
    case 1 -> "Lundi";
    case 2 -> "Mardi";
    case 3 -> "Mercredi";
    case 4 -> "Jeudi";
    case 5 -> "Vendredi";
    case 6 -> "Samedi";
    case 7 -> "Dimanche";
    default -> "Jour invalide";
};

System.out.println(nomJour);
Sortie
Mercredi

6.5 Comparaison if-else if vs switch

Critère if-else if switch
Type de condition Toute expression booléenne Valeur constante uniquement
Types supportés Tous types int, char, String, enum
Lisibilité (nombreux cas) Moins lisible Plus lisible
Plages de valeurs Possible (a >= 10 && a < 20) Non supporté (valeurs exactes)
Performance (nombreux cas) Linéaire Potentiellement en O(1) (table de saut)

7. Exercice

Calculatrice simple avec switch

Niveau : Débutant

Écrire un programme Java nommé Calculatrice qui prend deux entiers a et b et un opérateur (char), puis affiche le résultat de l'opération correspondante.

Travail demandé

  1. Utiliser un switch sur l'opérateur ('+', '-', '*', '/', '%').
  2. Afficher le résultat sous la forme 10 / 3 = 3.
  3. Gérer la division par zéro avec un message d'erreur.
  4. Afficher "Opérateur inconnu" dans le default.
Exemple 1 — Division
Entrée
a=10, b=3, op='/'
Sortie
10 / 3 = 3
Exemple 2 — Division par zéro
Entrée
a=10, b=0, op='/'
Sortie
Erreur : division par zéro !
Contraintes
  • Utiliser switch pour sélectionner l'opération
  • Utiliser if à l'intérieur du case '/' pour gérer la division par zéro
  • Le default doit afficher un message d'opérateur inconnu

  L'essentiel en bref

Java propose quatre structures conditionnelles. Le if exécute un bloc si une condition est vraie. Le if-else choisit entre deux alternatives. Le if-else if-else teste plusieurs conditions en cascade — l'ordre est crucial, partez toujours de la condition la plus restrictive. Le switch compare une expression à des valeurs constantes et est préférable au if-else if quand on teste une même variable contre de nombreuses valeurs fixes. Depuis Java 14, le switch expression avec la flèche -> élimine le fall-through accidentel et permet de retourner directement une valeur.

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.