Accueil > Programmer avec Java > Structures de contrôle >
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.
if
et else
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.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.À la fin de cette leçon vous devrez être en mesure de :
if
, else if
et else
.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
:
1
2
3
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
:
1
2
3
4
5
if (condition) {
// code à exécuter si la condition est vraie
} else {
// code à exécuter si la condition est fausse
}
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 :
1
2
3
4
5
6
7
8
9
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
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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.");
}
}
À part l’invite de réponse, ce sera :
1
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.
On fait les 6 premières lignes en séquence pour ensuite arriver à ceci :
1
2
3
4
5
6
7
8
9
10
...
6
7
8
10
12
14
15
16
19
false
dans ce cas) …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.main
.Si on a plusieurs cas indépendants (des cas où plusieurs cas peuvent être vrais), on peut utiliser plusieurs blocs if
:
1
2
3
4
5
6
7
8
9
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
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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!");
}
}
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
.
Répondre aux questions insérées dans les notes après les exemples.
Structure du fichier et code de démarrage dans un nouveau fichier :
Selection.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 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é.
"/"
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.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
.
6
(3 if
). Pour chaque dé, afficher un message dans ce cas, mais ne faites rien dans le cas contraire.if
avec opérations logiques) et afficher un message approprié dans ce cas.if
avec opérations logiques) et afficher un message approprié dans ce cas.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.
if
et else
. Les problèmes sont :
Le problème “everyNth” utilise aussi une boucle, ce qui sera vue dans la prochaine leçon.