Skip to content

Les conditions

2) Les booléens et opérateurs de comparaison

Une expression booléenne vaut true ou false.

Opérateurs de comparaison (nombres, char, types primitfs): - == égal à - != différent de - <, <=, >, >=

Opérateurs logiques (composent plusieurs conditions) : - && (ET logique) — vrai si toutes les conditions sont vraies - || (OU logique) — vrai si au moins une condition est vraie - ! (NON logique) — inverse la valeur booléenne

Exemples :

int age = 20;
boolean majeurAuQuebec = age >= 18;       // true
boolean senior = age >= 65;               // false
boolean reductionEtudiant = !senior && age < 26; // true

⚠️ Chaînes de caractères : ne comparez pas les String avec == mais avec .equals(...) ou .equalsIgnoreCase(...) (voir §7).


3) if (simple), if/else et if/else if/else

3.1) if simple

int temperature = 31;
if (temperature > 30) {
    System.out.println("Il fait très chaud !");
}
Le bloc entre {} ne s’exécute que si l’expression après if est vraie.

3.2) if / else

int note = 62;
if (note >= 60) {
    System.out.println("Réussi");
} else {
    System.out.println("Échoué");
}

3.3) Chaînage : if / else if / else

int t = 12;
if (t >= 30) {
    System.out.println("Chaud");
} else if (t >= 15) {
    System.out.println("Doux");
} else if (t >= 0) {
    System.out.println("Frais");
} else {
    System.out.println("Froid");
}

L’ordre est important : on teste du plus spécifique au plus général.


4) Imbrication et lisibilité

Les if peuvent être imbriqués, mais la lisibilité prime. Préférez extraire des méthodes ou utiliser un switch lorsque pertinent.

boolean estWeekend = true;
boolean pleut = false;

if (estWeekend) {
    if (!pleut) {
        System.out.println("On va faire du vélo !");
    } else {
        System.out.println("On regarde un film.");
    }
} else {
    System.out.println("On travaille.");
}


5) switch : classique et moderne (Java 14+)

Le switch choisit un chemin selon la valeur d’une variable (souvent int, String, enum).

5.1) switch classique

int jour = 3; // 1=Lundi ... 7=Dimanche
switch (jour) {
    case 1:
        System.out.println("Lundi");
        break;
    case 2:
        System.out.println("Mardi");
        break;
    case 3:
        System.out.println("Mercredi");
        break;
    default:
        System.out.println("Autre");
}

N’oubliez pas break; pour éviter de "tomber" dans le case suivant (fall-through).

5.2) switch expression (moderne) — Java 14+

Plus concis, peut retourner une valeur.

int jour = 3;
String libelle = switch (jour) {
    case 1 -> "Lundi";
    case 2 -> "Mardi";
    case 3 -> "Mercredi";
    case 4,5 -> "Jeudi ou Vendredi"; // cases groupés
    default -> "Week-end";
};
System.out.println(libelle);

Java 21 ajoute le pattern matching pour switch (avec instanceof et scellés), utile pour des hiérarchies d’objets — hors scope débutant, mais bon à savoir.


6) L’opérateur ternaire ?:

Version compacte d’un if/else pour choisir une valeur.

int age = 19;
String tarif = (age < 18) ? "Jeune" : "Adulte";
System.out.println(tarif);
À limiter aux cas simples pour garder un code lisible.


7) Comparer des objets (String, Integer, etc.)

  • == compare les références (adresse mémoire) des objets.
  • .equals(...) compare le contenu logique.
String a = new String("Bonjour");
String b = new String("Bonjour");
System.out.println(a == b);        // false (références différentes)
System.out.println(a.equals(b));   // true  (contenu identique)

String s = "ALMA";
boolean ok = s.equalsIgnoreCase("alma"); // true

⚠️ Pensez à gérer le null avant d’appeler .equals(...) :
"texte".equals(variable) est plus sûr que variable.equals("texte") si variable peut être null.


8) Évaluation paresseuse (short-circuit)

Avec && et ||, Java n’évalue pas la seconde partie si le résultat est déjà connu.

String nom = null;
if (nom != null && nom.length() > 3) {
    System.out.println("Nom assez long");
}
Ici, nom.length() n’est jamais exécuté si nom est null → évite un NullPointerException.


9) Priorité des opérateurs

Priorité courante (du plus fort au plus faible) : ! > && > ||.
Utilisez des parenthèses pour la clarté.

boolean res = (age >= 18 && ville.equals("Alma")) || carteMembre;


10) Exemples pratiques

10.1) Année bissextile

int annee = 2028;
boolean bissextile = (annee % 400 == 0) || (annee % 4 == 0 && annee % 100 != 0);
System.out.println(bissextile ? "Bissextile" : "Non bissextile");

10.2) Catégorie d’IMC (simplifiée)

double imc = 27.3;
String categorie = (imc < 18.5) ? "Insuffisance" :
                   (imc < 25)   ? "Normal" :
                   (imc < 30)   ? "Surpoids" : "Obésité";
System.out.println(categorie);

10.3) Menu avec switch

String choix = "2";
String action = switch (choix) {
    case "1" -> "Nouveau fichier";
    case "2" -> "Ouvrir";
    case "3" -> "Enregistrer";
    default -> "Quitter";
};
System.out.println(action);

11) Pièges courants et bonnes pratiques

  • Chaînes : utilisez .equals(...), pas == (sauf pour null).
  • Bornes et inclusivité : soyez explicite (>=, <=) et testez les bords (0, 1, max…).
  • Lisibilité : préférez des conditions nommées :
    boolean estAdmissible = age >= 18 && points >= 60;
    if (estAdmissible) { ... }
    
  • Évitez les if trop longs : extrayez en méthodes ou utilisez switch/enum.
  • Short-circuit : exploitez &&/|| pour éviter les NPE.
  • Ternaires : ok pour choisir une valeur simple, sinon if/else.

12) Exercices (avec solutions)

Exercice 1 — Pair ou impair

Énoncé : écrire un programme qui lit un entier n et affiche "Pair" si n est divisible par 2, sinon "Impair". Solution :

int n = 17;
System.out.println((n % 2 == 0) ? "Pair" : "Impair");

Exercice 2 — Barème de notes

Énoncé : à partir d’une note sur 100, afficher A (>=85), B (>=75), C (>=60), D (>=50), E sinon. Solution :

int note = 78;
char rang = (note >= 85) ? 'A' :
            (note >= 75) ? 'B' :
            (note >= 60) ? 'C' :
            (note >= 50) ? 'D' : 'E';
System.out.println(rang);

Exercice 3 — Contrôle d’accès

Énoncé : autoriser l’accès si l’utilisateur est admin OU (membre et actif). Les variables :

boolean admin = false;
boolean membre = true;
boolean actif = true;
Solution :
boolean acces = admin || (membre && actif);
System.out.println(acces ? "Accès autorisé" : "Accès refusé");

Exercice 4 — Switch jour de la semaine

Énoncé : selon un entier 1..7, afficher le nom du jour. Regroupez 6 et 7 sous "Week-end" avec le switch moderne. Solution :

int jour = 6;
String nom = switch (jour) {
    case 1 -> "Lundi";
    case 2 -> "Mardi";
    case 3 -> "Mercredi";
    case 4 -> "Jeudi";
    case 5 -> "Vendredi";
    case 6, 7 -> "Week-end";
    default -> "Invalide";
};
System.out.println(nom);

Exercice 5 — Sécurité sur String

Énoncé : si String email n’est pas null et contient un @, afficher "Valide"; sinon "Invalide". Indice : short-circuit. Solution :

String email = "alice@example.com";
boolean valide = (email != null) && email.contains("@");
System.out.println(valide ? "Valide" : "Invalide");


13) Mini-projet (consolidation)

But : calculer le prix final d’un billet selon l’âge et la carte membre.

Règles : - Tarif de base : 20$ - < 12 ans : -50% - 12..17 ans : -25% - 65+ ans : -30% - Carte membre : -10% supplémentaire

Solution proposée :

int age = 70;
boolean carteMembre = true;

double prix = 20.0;

if (age < 12) {
    prix *= 0.5;
} else if (age <= 17) {
    prix *= 0.75;
} else if (age >= 65) {
    prix *= 0.7;
}

if (carteMembre) {
    prix *= 0.9;
}

System.out.printf("Prix final : %.2f$\n", prix);


14) Pour aller plus loin

  • enum + switch pour des règles de décision claires
  • Pattern Matching (instanceof et switch avancé) en Java 21
  • Validation avec tests unitaires (JUnit) pour couvrir vos cas limites

15) Check-list de révision

  • [ ] Je sais écrire un if, else if, else
  • [ ] Je sais utiliser switch (classique et moderne)
  • [ ] Je connais == vs .equals(...) pour les objets
  • [ ] Je gère null et j’utilise le short-circuit
  • [ ] Je sais quand utiliser un ternaire vs un if/else

Bon apprentissage ! 👩‍💻👨‍💻