Keyboard shortcuts

Touchez ← ou → pour naviguer les chapitres

Touchez S ou / pour chercher dans le livre

Touchez ? pour afficher ce message

Touchez Esc pour masquer ce message

Accueil > Programmer avec Java > Structures de contrĂŽle >

📚 SĂ©lection

Survol et attentes

La sĂ©lection est un concept fondamental de la programmation. Elle permet au programme d’adapter son comportement selon l’état de diffĂ©rentes conditions. Bref, le programme devient plus intelligent. Dans cette leçon, nous allons voir comment utiliser la sĂ©lection en Java.

Définitions
Séléction
concept de programmation qui permet d’exĂ©cuter du code seulement si une condition est vraie. Cela crĂ©e plusieurs embranchements dans le code au lieu d’une seule sĂ©quence.
if et else
mots-clés utilisés pour la sélection en Java. Le bloc if déclare une condition et exécute son code si cette condition est vraie. Le bloc else suit un bloc if et exécute son code seulement si la condition du if était fausse.
Losange
forme utilisĂ©e pour reprĂ©senter une condition dans un diagramme de flux. Son Ă©tiquette reprĂ©sente une question avec une rĂ©ponse oui/non ou true / false, et il y a deux flĂšches qui quittent le bloc, une pour chaque rĂ©ponse possible. Cela donne la reprĂ©sentation visuelle claire de l’embranchement.

Objectifs d’apprentissage

À la fin de cette leçon vous devrez ĂȘtre en mesure de :

  • ReconnaĂźtre la syntaxe de la sĂ©lection en Java avec les blocs if, else if et else.
  • Lire et produire des diagrammes de flux incorporant des conditions et de l’embranchement.

CritĂšres de succĂšs

  • Je peux appliquer les conditions Ă  diffĂ©rentes situations de sĂ©lection dans mes programmes Java.
  • Je peux crĂ©er une cascade de conditions mutuellement exclusives.
  • Je peux crĂ©er une suite de conditions indĂ©pendantes.

Sélection conditionnelle avec if et else

La sĂ©lection permet d’exĂ©cuter du code seulement si une condition est vraie. La condition est n’importe quelle expression boolĂ©enne, soit une expression qui s’évalue Ă  true ou false :

if (condition) {
    // code à exécuter si la condition est vraie
}

if

On a aussi l’option d’exĂ©cuter du code si la condition est fausse en ajoutant un bloc else immĂ©diatement aprĂšs le bloc if :

if (condition) {
    // code à exécuter si la condition est vraie
} else {
    // code à exécuter si la condition est fausse
}

if_else

Plusieurs cas exclusifs avec else if

Si on a plusieurs cas exclusifs (des cas oĂč seulement un cas peut ĂȘtre est vrai) Ă  vĂ©rifier, on peut immĂ©diatement dĂ©clarer un bloc if suivant le mot-clĂ© else afin de poser la prochaine condition :

if (condition1) {
    // code à exécuter si la condition1 est vraie
} else if (condition2) {
    // code à exécuter si la condition2 est vraie
} else if (condition3) {
    // code à exécuter si la condition3 est vraie
} else {
    // code à exécuter si aucune des conditions précédentes n'est vraie
}

Chaque else reprĂ©sente ce qui se passe si le if prĂ©cĂ©dant est faux. On peut enchaĂźner autant de blocs else if que nĂ©cessaire. Le bloc else final est optionnel, mais est souvent utile pour dĂ©finir un cas par dĂ©faut, comme un message d’erreur.

cas_exclusifs

Cette façon d’enchaĂźner les conditions assure que seulement un bloc sera exĂ©cutĂ©. Il faut donc faire attention de bien Ă©crire les conditions afin de reprĂ©senter tous les cas possibles et de ne pas en oublier. C’est un bon exemple de situation oĂč faire des tests pour chaque cas, notamment les cas limites, est important.

Voici un exemple de code qui utilise plusieurs cas exclusifs dans le fichier LinkedConditions.java :

import java.util.*;

void main() {
    Scanner console = new Scanner(System.in);
    System.out.println("Quel est votre Ăąge? ");
    int age = console.nextInt();

    if (age < 4) {
        System.out.println("Enfant préscolaire");
    } else if (age <= 11) {
        System.out.println("Enfant d'école élémentaire");
    } else if (age <= 14) {
        System.out.println("Adolescent d'école intermédiaire.");
    } else if (age <= 18) {
        System.out.println("Adolescent d'école secondaire.");
    } else {
        System.out.println("Adulte.");
    }
}

catĂ©gories d’ñge

Quelle sera la sortie si l'utilisateur saisit la valeur 8?

À part l’invite de rĂ©ponse, ce sera :

Enfant d'école élémentaire

La variable age prendra la valeur 8, donc la premiÚre condition (age < 4) sera fausse. On passe donc au else qui le suit qui déclare immédiatement une autre condition (age <= 11) qui est vraie. On entre alors dans ce bloc de code et affiche son message.

C'est quoi le diagramme de séquence d'exécution (suite des numéros de lignes exécutées) si l'utilisateur saisit la valeur 17?

On fait les 6 premiÚres lignes en séquence pour ensuite arriver à ceci :

...
6
7
8
10
12
14
15
16
19
  • Notez surtout qu’on saute des lignes (les lignes 9, 11, et 13) : celles qui correspondent aux autres branches avec des conditions fausses
  • Notez aussi qu’on doit Ă©valuer chacune de ces conditions (les lignes 8, 10 et 12) pour savoir sur quelle branche continuer (le cĂŽtĂ© false dans ce cas) 

  • Jusqu’à ce qu’on passe par le cĂŽtĂ© true d’une branche (la ligne 15). Son bloc se termine avec l’accolade fermante Ă  la ligne 16 mais le reste de cette ligne et de la “cascade” est ignorĂ©e.
  • Le code se termine avec l’accolade fermante de main.

Plusieurs cas indépendants

Si on a plusieurs cas indĂ©pendants (des cas oĂč plusieurs cas peuvent ĂȘtre vrais), on peut utiliser plusieurs blocs if :

if (condition1) {
    // code à exécuter si la condition1 est vraie
}
if (condition2) {
    // code à exécuter si la condition2 est vraie
}
if (condition3) {
    // code à exécuter si la condition3 est vraie
}

Chaque bloc if est indĂ©pendant des autres et un, plusieurs ou aucun bloc if peut ĂȘtre exĂ©cutĂ© selon les conditions.

cas_indépendants

Voici un exemple de code qui utilise plusieurs cas indépendants dans le fichier IndependantConditions.java :

String input(String prompt) {
    System.out.print(prompt + " > ");
    return System.console().readLine(); 
                // plus simple mais moins puissante qu'un Scanner
}

void main() {
    String favColour = input("Couleur préférée");
    String favSeason = input("Saison préférée");
    int favNumber = Integer.parseInt(input("Nombre entier préférée")); 
        // on converti le String en int dans une 2Úme opération

    if (favColour.equals("bleu")) {
        System.out.println("Le bleu est ma couleur préférée aussi!");
    }
    if (favSeason.equals("été")) {
        System.out.println("L'été est ma saison préférée aussi!");
    }
    if (favNumber == 7) {
        System.out.println("7 est mon nombre préféré aussi!");
    }
}

comparaison indépendantes

Si la condition est vraie Ă  la ligne 13 (comparer les couleurs) est-ce qu'on continue avec les lignes de 16 Ă  20 ou est-ce qu'on les ignore?

On les fait quand mĂȘme! Si le premier if est vrai ou faux on passe sur ces lignes tout de mĂȘme parce qu’elles ne sont pas sur une branche else.

Exercices

📚 Tester la comprĂ©hension

Répondre aux questions insérées dans les notes aprÚs les exemples.

đŸ› ïž Pratique

A. Exemples à développer

Structure du fichier et code de démarrage dans un nouveau fichier : Selection.java

import java.util.*;

final Scanner IN = new Scanner(System.in);

void calc() {
  // #1 : à développer
}

void dice() {
  // #2 : à développer
}

void main() {
  // appeler les autres méthodes pour les tester
}
  1. calc() : Demander deux valeurs de type double Ă  l’utilisateur. Ensuite lui demander quelle opĂ©ration qu’elle veut faire ("+", "-", "*", ou "/"). Utiliser la sĂ©lection (if, else if et else) pour afficher le rĂ©sultat du calcul appropriĂ©.

    • Bonus : si l’utilisateur choisit "/" faire une sĂ©lection additionnelle (if) pour vĂ©rifier si le deuxiĂšme nombre est 0 et afficher un message d’erreur au lieu de faire le calcul.
  2. dice() : Utiliser l’opĂ©ration (int)(Math.random() * 6 + 1) pour gĂ©nĂ©rer des valeurs alĂ©atoires entre 1 et 6 (les valeurs d’une dĂ©). Stocker trois de ces valeurs dans des variables de type int.

    • Utiliser la sĂ©lection pour vĂ©rifier si chaque valeur individeulle est un 6 (3 if). Pour chaque dĂ©, afficher un message dans ce cas, mais ne faites rien dans le cas contraire.
    • Ensuite, utiliser une seule sĂ©lection pour voir si un nombre se rĂ©pĂšte (deux valeurs sont identiques) au moins une fois (1 if avec opĂ©rations logiques) et afficher un message appropriĂ© dans ce cas.
    • Finalement, vĂ©rifier si les trois valeurs sont identiques (1 if avec opĂ©rations logiques) et afficher un message appropriĂ© dans ce cas.

B. ProblĂšmes de logique sur le site CodingBat (Enrichissement)

Comme avec la leçon prĂ©cĂ©dente, c’est fort possible que vous ayez de la difficultĂ© avec plusieurs de ces casse-tĂȘtes. Si un problĂšme vous cause trop d’ennuis, vous pouvez passer Ă  un autre. Il y en a beaucoup! Rappelez-vous que le but est de vous familiariser avec la sĂ©lection if-else afin que vous puissiez l’utiliser dans des contextes de votre choix pas dans le contexte de problĂšmes de logique.

  1. Tenter le reste des problÚmes de Warmup-1. Ces autres problÚmes utilisent des conditions et opérateurs logiques comme la liste précédente mais doivent aussi utiliser la sélection avec if et else. Les problÚmes sont :
    • sumDouble
    • diff21
    • parrotTrouble
    • posNeg
    • notString
    • frontBack
    • front3
    • front22
    • loneTeen
    • delDel
    • startOz
    • intMax
    • close10
    • in3050
    • max1020
    • stringE
    • endUp

Le problùme “everyNth” utilise aussi une boucle, ce qui sera vue dans la prochaine leçon.

© 2022-2025 David Crowley