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
Stringavec==mais avec.equals(...)ou.equalsIgnoreCase(...)(voir §7).
3) if (simple), if/else et if/else if/else¶
3.1) if simple¶
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
instanceofet 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.
À 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
nullavant d’appeler.equals(...):
"texte".equals(variable)est plus sûr quevariable.equals("texte")sivariablepeut êtrenull.
8) Évaluation paresseuse (short-circuit)¶
Avec && et ||, Java n’évalue pas la seconde partie si le résultat est déjà connu.
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é.
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 pournull). - Bornes et inclusivité : soyez explicite (
>=,<=) et testez les bords (0, 1, max…). - Lisibilité : préférez des conditions nommées :
- É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 :
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 :
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 = "[email protected]";
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+switchpour des règles de décision claires- Pattern Matching (
instanceofetswitchavancé) 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
nullet j’utilise le short-circuit - [ ] Je sais quand utiliser un ternaire vs un
if/else
Bon apprentissage ! 👩💻👨💻