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).

instructions conditionnelles en Java

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 code if, 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.

Catégories : java

0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *