Les instructions conditionnelles en java déterminent le flux du programme. Souvent, nous devons vérifier une condition avant de prendre une décision.
Lorsque nous devons exécuter un ensemble d’instructions basées sur une condition, nous utilisons des instructions de flux de contrôle .
Si une condition n’est pas remplie, une autre sera évaluée (s’il y en a une). Cette évaluation se poursuit jusqu’à ce que toutes les conditions soient évaluées à true
(vrai) ou false
(faux).
L’instruction conditionnelle if
if(condition) {
instructions
}
L’opérateur if
(signifie si) vous permet de définir une condition selon laquelle la suite du programme peut être exécutée. Elle commence par un mot clé if
suivit par une une condition entre parenthèses.
A titre d’exemple, considérons une égalité simple, si elle est vraie, le programme affichera le résultat :
if(2 * 2 == 4){
System.out.println("Bonjour!");
}
Puisque la condition est vraie (true)
, Bonjour! sera affiché.
Prenons un autre exemple.
if (true)
{
System.out.println("Ce message sera toujours affiché!");
}
Instruction conditionnelle if…else en Java
L’instruction else
en langage Java signifie « sinon ». C’est-à-dire que si la condition if
n’est pas vraie, ce qui est dans le bloc else
sera affiché :
if(2 * 2 == 5){
System.out.println("Le programme est en cours");
} else{
System.out.println("La condition est fausse");
}
Cela fonctionnera également sans le mot-clé else
, mais pour rendre le code lisible et logique, il ne faut pas négliger else
, comme dans l’exemple suivant :
if(2 * 2 == 5){
System.out.println("Le programme est en cours");
}
System.out.println("La condition est fausse");
Prenons un autre exemple :
int a = 20;
if(a == 10){
System.out.println("a = 10");
} else if(a == 15){
System.out.println("a = 15");
} else if(a == 20){
System.out.println("a = 20");
} else{
System.out.println("Rien à afficher");
}
Comme vous pouvez le constater, seule la troisième condition est vraie, elle est donc affichée (a = 20) et tous les autres blocs seront ignorés.
L’instruction if imbriquée
De plus, plusieurs conditions peuvent être vérifiées à la fois, selon lesquelles différentes actions sont effectuées. Imaginons que nous ayons deux variables, sur la base desquelles nous pouvons créer deux conditions :
int a = 20;
int b = 5;
if(a == 20){
System.out.println("a = 20");
if(b == 5){
System.out.println("b = 5");
}
}
Ce qui nous donne :
a = 20
b = 5
En conséquence, le programme entre dans les deux blocs et les exécute, car les deux conditions sont vraies.
Il est recommandé d'ajouter une indentation avant les instructions à l'intérieur du bloc de codeif
, chaque bloc est entre deux accolades{}
. S'il n'y a qu'une seule déclaration dans le bloc de if, il n'est pas obligatoire de mettre les accolades{ }
. Testez vous même.
Prenons un autre exemple.
int num1 = 10, num2 = 20;
if (num1 < num2) {
System.out.println("num2 est supérieur à num1");
}
System.out.println("Cette instruction est à l'extérieur du bloc if");
Résultat :
num2 est supérieur à num1
Cette instruction est à l'extérieur du bloc if
Nous avons ajouté une instruction en dehors du bloc de if
. Ainsi, cette instruction System.out.println(" Cette instruction est à l'extérieur du bloc if")
sera toujours exécutée, que la condition de if
soit vraie ou fausse.
Des nombres tels que 1, 2, 3, etc. sauf 0 sont évalués comme vrais s'ils sont utilisés comme condition. 0 est évalué comme faux.
public class Test {
public static void main(String[] args) {
int num1 = 20, num2 = 10;
if (num1 < num2) {
System.out.println("num2 est est supérieur à num1");
} else {
System.out.println("num2 est inférieur à num1");
}
System.out.println("Cette instruction est à l'extérieur du bloc if et else");
}
}
Ce qui donne :
num2 est inférieur à num1
Cette instruction est à l'extérieur du bloc if et else
Étant donné que num1
est supérieur à num2
, la condition num1 < num2
est devenue fausse, par conséquent, l’instruction dans le bloc de else
a été exécutée.
Si la condition était vraie, alors l’instruction dans le corps de if
aurait été exécutée.
Prenons un autre exemple, nous allons lire les données saisies par l’utilisateur en utilisant la classe Scanner.
import java.util.Scanner;
class Test {
public static void main(String[] args) {
System.out.println("Quel est votre âge : ");
Scanner s = new Scanner(System.in);
int age = s.nextInt();
if (age > 18) {
System.out.println("Vous avez plus de 18 ans");
System.out.println("Vous pouvez voter");
} else {
System.out.println("Vous avez moins de 18 ans");
System.out.println("Vous ne pouvez pas voter");
}
}
}
Exécution du code :
Quel est votre âge :
15
Vous avez moins de 18 ans
Vous ne pouvez pas voter
L’instruction conditionnelle else if
Parfois, les instructions if
et else
ne suffisent pas. Java fournit un autre outil pour y parvenir.
Voyons sa syntaxe.
if ( condition ) {
instructions
}
else if ( condition ) {
instructions
}
else if ( condition ) {
instructions
}
...
...
else {
instructions
}
Tout d’abord, la condition de if
est vérifiée. Si c’est vrai, alors le bloc de if
sera exécuté.
Si la condition de if
est fausse, alors la condition du premier else if
est vérifiée. Si elle est vraie, alors son bloc de code sera exécuté, sinon la condition du prochain else if
qui sera vérifiée.
Si les conditions de if
et de tous les blocs else if
sont fausses, alors c’est le bloc de else
qui sera exécuté.
import java.util.*;
class Test {
public static void main(String[] args) {
int x, y, z;
Scanner s = new Scanner(System.in);
System.out.println("Saisissez un nombre : ");
x = s.nextInt();
System.out.println("Saisissez un autre nombre : ");
y = s.nextInt();
System.out.println("Saisissez un troixième nombre : ");
z = s.nextInt();
if ((x > y) && (x > z)) {
System.out.println(x + " est le plus grand nombre");
} else if ((y > x) && (y > z)) {
System.out.println(y + " est le plus grand nombre");
} else System.out.println(z + " est le plus grand nombre");
}
}
Dans l’exemple ci-dessus, on nous donne trois nombres x, y et z, puis, nous devons trouver le plus grand d’entre eux. Pour cela, nous allons d’abord comparer le premier nombre avec les autres nombres c’est-à-dire x avec y et z. Si la condition (x>y && x>z)
de if
est vraie (si les deux sont vraies, le nombre x est le plus grand), alors le bloc de if sera exécuté.
Si ce n’est pas le cas, la condition (y>x && y>z)
de else if
est vérifiée. Si cette condition est vraie, alors le bloc de else if
sera exécuté. Si c’est faux, alors le bloc de else
sera exécuté.
Dans notre cas, puisque y est supérieur à x et z, donc la condition de else if
est devenue vraie et son bloc a été exécuté.
Saisissez un nombre :
25
Saisissez un autre nombre :
33
Saisissez un troisième nombre :
15
33 est le plus grand nombre
Instructions if…else imbriquées
Nous pouvons utiliser des instructions if
, if…else
ou if…else if…else
dans le bloc d’autres instructions if , if…else ou if…else if…else
. C’est ce qu’on appelle l’ imbrication.
Voyons un exemple.
class Test {
public static void main(String[] args) {
int note = 12;
if (note <= 10) {
System.out.println("Très faible");
} else {
if (note < 15) {
System.out.println("Bien");
} else {
System.out.println("Très bien");
}
}
Comme vous pouvez le constater, nous avons un if...else
à l’intérieur d’un else
.
Maintenant, voici un autre exemple. Le programme suivant vérifie si un nombre est le plus grand parmi trois nombres.
class Test {
public static void main(String[] args) {
int x = 5, y = 2, z = 8;
if (x > y) {
if (x > z) System.out.println(
"x est le plus grand nombre"
); else System.out.println("x n'est pas le plus grand nombre");
} else System.out.println("x n'est pas le plus grand nombre");
}
}
Ce qui nous donne :
x n'est pas le plus grand nombre
Si x n’était pas supérieur à y, le else
extérieur sera directement exécuté. Toutefois, x est supérieur à y, donc la condition imbriqué qui compare x à z sera vérifiée.
L’ opérateur ternaire
L’ opérateur ternaire fait partie des instructions conditionnelles en Java. Comme son nom l’ indique, ternaire, il est composé de trois opérandes.
En fait, c’est une version simplifiée de l’instruction if-else
avec une valeur à renvoyer.
Le premier opérande est une expression booléenne (la condition) et les deux autres sont des expressions du même type de données. L’opérateur ternaire s’écrit ainsi :
condition ? valeur1 : valeur2
Si le premier opérande (condition) est évalué à vrai, il renvoie le deuxième opérande (valeur1), sinon il renvoie le troisième opérande (valeur2). Puisque l’opérateur ternaire renvoie une valeur, nous pouvons affecter la valeur renvoyée à une variable.
Exemples d’opérateur ternaire en Java
Disons que nous avons deux variables et que nous voulons attribuer la plus grande valeur d’entre elles à une nouvelle variable max
.
class Test {
public static void main(String[] args) {
int a = 20, b = 10;
int max = a > b ? a : b;
System.out.println(max); // affiche 20
}
}
Tout d’abord, la condition booléenne a > b
est évaluée. Comme 20 est supérieur à 10, la condition est évaluée comme vraie et le deuxième opérande a
est renvoyé. Ainsi, la variable max
est définie à 20. Par contre, si nous modifions la valeur de a et b comme ceci :
int a = 10, b = 15;
int max = a > b ? a : b;
System.out.println(max); // affiche 15
Nous pouvons également afficher un message indiquant quelle variable est la plus grande.
int num1 = 10, num2 = 15;
System.out.println(num1 > num2 ? "num1 est supérieur à num2" : "num2 est supérieur à num1"); // affiche b est supérieur à num1
Notez que les exemples ci-dessus peuvent également être écrits en utilisant if..else
. L’utilisation d’un opérateur ternaire permet de raccourcir le code.
Voyons maintenant un exemple plus avancé. Le programme suivant affiche le plus grand nombre parmi trois entiers.
int max = ((num1 > num2) && (num1 > num3)) ? num1 : ((num2 > num3) ? num2 : num3);
System.out.println("Le plus grand nombre est : " + max);
Ce qui affiche :
Le plus grand nombre est : 30
Nous avons un exemple d’opérateur ternaire imbriqué. Essayez de comprendre le code vous-même avant de lire l’explication.
Vous avez trois nombres num1
, num2
et num3
, le programme doit attribuer le plus grand nombre à la variable max
.
Tout d’abord, la condition (num1 > num2) && (num1 > num3)
est vérifiée. Si cette condition est vraie ( c’est-à-dire num1
est supérieur à num2
et num3
), num1
sera affecté à max
.
Cependant, si cette condition est fausse, dans ce cas l’expression (num2 > num3) ? num2 : num3
est évaluée et affectée à max
. Dans cette expression, la condition num2 > num3
est vérifiée. Si cette condition est vraie ( ce qui signifie num2 est le plus grand ), alors num2
est affecté à max
, sinon num3
est affecté à max
.
Le code if/else
équivalent pour le même exemple serait :
class Test{
public static void main(String[] args){
int num1 = 10, num2 = 20, num3 = 30;
int max;
if((num1 > num2) && (num1 > num3)) {
max=num1;
}
else {
if (num2 > num3)
max = num2;
else
max = num3;
}
System.out.println("Le plus grand nombre est " + max);
}
}
L'utilisation d'opérateurs ternaires imbriqués au lieu de if...else
n'est pas recommandée car elle augmente la complexité du code.
Dans le tutoriel suivant, nous verrons une autre approche pour effectuer la prise de décision qui peut réduire la complexité du code par rapport à if…else
dans certains cas.
0 commentaire