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.
ifetelse- mots-clés utilisés pour la sélection en Java. Le bloc
ifdéclare une condition et exécute son code si cette condition est vraie. Le blocelsesuit un bloc if et exécute son code seulement si la condition duifé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 ifetelse. - 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
}

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
}

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.

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.");
}
}

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Ă©
falsedans ce cas) ⊠- JusquâĂ ce quâon passe par le cĂŽtĂ©
truedâ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.

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!");
}
}

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
}
-
calc(): Demander deux valeurs de typedoubleĂ lâutilisateur. Ensuite lui demander quelle opĂ©ration quâelle veut faire ("+","-","*", ou"/"). Utiliser la sĂ©lection (if,else ifetelse) 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 est0et afficher un message dâerreur au lieu de faire le calcul.
- Bonus : si lâutilisateur choisit
-
dice(): Utiliser lâopĂ©ration(int)(Math.random() * 6 + 1)pour gĂ©nĂ©rer des valeurs alĂ©atoires entre1et6(les valeurs dâune dĂ©). Stocker trois de ces valeurs dans des variables de typeint.- Utiliser la sĂ©lection pour vĂ©rifier si chaque valeur individeulle est un
6(3if). 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
ifavec opérations logiques) et afficher un message approprié dans ce cas. - Finalement, vérifier si les trois valeurs sont identiques (1
ifavec opérations logiques) et afficher un message approprié dans ce cas.
- Utiliser la sélection pour vérifier si chaque valeur individeulle est un
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.
- 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
ifetelse. 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.