CodeGym /Cours /JAVA 25 SELF /if imbriqués, logique multiniveau

if imbriqués, logique multiniveau

JAVA 25 SELF
Niveau 3 , Leçon 2
Disponible

1. Syntaxe de base de l’if imbriqué

Dans la vraie vie, il est rare de prendre une décision sur un seul critère. En général, il faut vérifier plusieurs conditions, souvent dépendantes les unes des autres. Par exemple, pour entrer à un concert, être majeur ne suffit pas — il faut parfois aussi être sur la liste des invités. C’est là qu’intervient la logique multiniveau, et les instructions if imbriquées nous y aident.

Des conditions imbriquées, c’est lorsqu’un if vit à l’intérieur d’un autre. Imaginez une boîte dans une boîte : si la condition externe est vraie, alors seulement la condition interne est vérifiée. C’est un puissant outil de contrôle du flux d’exécution.

Commençons par quelque chose de simple :

if (conditionA)
{
    // actions si conditionA est true (vrai)
    if (conditionB)
    {
        // actions si les deux conditions sont vraies
    }
}
Un if imbriqué à l’intérieur d’un autre if

Si cela vous fait penser à une matriochka — vous avez tout compris ! Le if interne ne s’exécutera que si l’externe a été vérifié avec succès.

Exemple : accès au club

Développons notre petite application pédagogique, où l’utilisateur saisissait auparavant son nom et son âge. Ajoutons maintenant un deuxième niveau de vérification : supposons que, pour entrer dans un club privé, il faut avoir plus de 21 ans et disposer d’un code d’invitation.

System.out.print("Entrez votre nom: ");
String name = console.nextLine();

System.out.print("Entrez votre âge: ");
int age = console.nextInt();

if (age >= 21)
{
    System.out.print("Entrez le code d’invitation: ");
    String code = console.nextLine();

    if (code.equals("VIP2024"))
    {
        System.out.println("Bienvenue, " + name + ", au club VIP!");
    }
    else
    {
        System.out.println("Désolé, code invalide. Accès refusé.");
    }
}
else
{
    System.out.println("Désolé, entrée à partir de 21 ans!");
}

Remarque : le if interne vérifie le code uniquement si l’âge a déjà passé la vérification. Cela économise des ressources (et les nerfs du videur).

2. Combien de niveaux d’imbrication sont acceptables ?

Techniquement — autant que vous voulez. Mais en pratique : plus il y a de niveaux imbriqués, plus il est difficile de lire et de maintenir le code. On essaye généralement de se limiter à 23 niveaux. Si vous obtenez une « échelle » de 4+ if imbriqués, demandez-vous s’il n’est pas possible de simplifier la logique ou d’extraire des vérifications dans des méthodes.

Logique imbriquée: visualisation

3. if et else imbriqués : pièges et nuances

Erreur fréquente des débutants : l’usage négligent des accolades.

En Java, avec else, il existe une règle stricte : sans accolades {}, seul le premier énoncé qui suit un if ou un else lui est rattaché. C’est une source fréquente de bogues agaçants.

Exemple avec erreur potentielle :

if (age >= 21)
    if (code.equals("VIP2024"))
        System.out.println("Bienvenue!");
else
    System.out.println("Code invalide.");

Beaucoup s’attendent à ce que le else se rapporte à la vérification de l’âge, mais en réalité il se rapporte au if qui le précède immédiatement (la vérification du code d’invitation). Par conséquent, les messages peuvent ne pas s’afficher comme prévu. Mieux vaut toujours utiliser des accolades — même s’il n’y a qu’une seule instruction !

Pour lever toute ambiguïté, le compilateur voit ce code ainsi :

if (age >= 21)
{    
    if (code.equals("VIP2024"))
        System.out.println("Bienvenue!");
else
    System.out.println("Code invalide.");
}    

Important ! Encore une fois : si, dans une construction if-else, les accolades ne sont pas présentes, le else se rattache au if précédent (le plus proche).

4. Alternatives : else if dans des conditions imbriquées

Parfois, à l’intérieur du if externe, on souhaite non seulement vérifier une condition supplémentaire, mais aussi prévoir une alternative. Par exemple, si le code d’invitation n’est pas correct, on peut proposer un accès invité ou refuser l’entrée.

if (age >= 21)
{
    System.out.print("Entrez le code d’invitation: ");
    String code = console.nextLine();

    if (code.equals("VIP2024"))
    {
        System.out.println("Bienvenue au club!");
    }
    else if (code.equals("GUEST"))
    {
        System.out.println("Mode invité: accès uniquement jusqu’à 23:00.");
    }
    else
    {
        System.out.println("Hélas, accès impossible.");
    }
}
else
{
    System.out.println("Entrée à partir de 21 ans.");
}

Ici, à l’intérieur du choix externe, nous faisons un choix imbriqué entre trois scénarios : code VIP, code invité et refus.

5. Pratique : calculateur de remise avec logique multiniveau

Supposons que l’utilisateur reçoive une remise en fonction de son âge et de la possession d’une carte de membre.

  • Si l’âge de l’utilisateur est supérieur ou égal à 60 — remise de 15 %.
  • Si l’âge est inférieur, mais que l’utilisateur possède une carte de membre — remise de 7 %.
  • Dans les autres cas, pas de remise.

Comment l’implémenter ?

System.out.print("Entrez votre âge: ");
int age = console.nextInt();

double discount = 0.0;

if (age >= 60)
{
    discount = 0.15;
}
else
{
    System.out.print("Avez-vous une carte de membre (oui/non) ? ");
    String hasCard = console.nextLine();

    if (hasCard.equals("oui"))
    {
        discount = 0.07;
    }
}

System.out.println("Votre réduction: " + (discount * 100) + "%");

Ici, nous avons utilisé un if imbriqué à l’intérieur de la branche else : si l’âge ne convient pas, on ne demande la carte que dans ce cas.

1
Mission
JAVA 25 SELF, niveau 3, leçon 2
Bloqué
Vérification de l'entrée à la fête 🥳
Vérification de l'entrée à la fête 🥳
1
Mission
JAVA 25 SELF, niveau 3, leçon 2
Bloqué
Entrée au club 🌃
Entrée au club 🌃
1
Mission
JAVA 25 SELF, niveau 3, leçon 2
Bloqué
Invitations pour la conférence 🎤
Invitations pour la conférence 🎤
1
Mission
JAVA 25 SELF, niveau 3, leçon 2
Bloqué
Programme de fidélité en magasin 🛍️
Programme de fidélité en magasin 🛍️
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION