Essayer de coder ← Retour aux sujets

if / else if / else

boolean

Une condition Java est obligatoirement un boolean (true ou false) : il n'y a pas de « 0 est faux » comme en C.

if (n > 0) { … }
Exécuté si la condition vaut true
else if (n < 0) { … }
Testé si les conditions précédentes sont fausses
else { … }
Tous les autres cas
== != < <= > >=
Comparaisons de nombres : le résultat est un boolean
&& || !
ET, OU, NON
s.equals("oui")
Compare le contenu de deux String
Signe.java
public class Signe {
    public static void main(String[] args) {
        int n = -4;

        if (n > 0) {
            System.out.println("positif");
        } else if (n < 0) {
            System.out.println("negatif");
        } else {
            System.out.println("nul");
        }
    }
}
Affichage
negatif

switch, ternaire, equals

switch · ?:

switch aiguille selon un entier, un caractère, un String ou une énumération ; ?: choisit entre deux valeurs.

switch (jour) { case "lundi": … break; }
Forme classique : le break termine chaque cas
case 6, 7, 8 -> …
Forme fléchée (Java 14 et plus) : ni break, ni chute
a > b ? a : b
Opérateur ternaire : une expression qui donne une valeur
s.equalsIgnoreCase("OUI")
Comparaison sans tenir compte des majuscules
s == null
Teste l'absence d'objet
Jour.java
public class Jour {
    public static void main(String[] args) {
        String jour = "samedi";

        switch (jour) {
            case "samedi":
            case "dimanche":
                System.out.println("week-end");
                break;
            default:
                System.out.println("semaine");
        }
    }
}
Affichage
week-end

📘 Le cours : décider en Java

Un programme choisit entre plusieurs chemins grâce aux conditions. Les mots-clés sont les mêmes qu'en C (if, else, switch), mais Java est plus strict : une condition doit toujours être une expression de type boolean.

Une condition est un boolean

if (n) avec un int ne compile pas : il faut écrire if (n != 0). Les comparaisons produisent un boolean que l'on peut ranger dans une variable, combiner ou afficher.

Booleens.java
public class Booleens {
    public static void main(String[] args) {
        int age = 17;
        boolean majeur = age >= 18;

        System.out.println(majeur);
        System.out.println(age >= 16 && age < 18);
        System.out.println(!majeur);
    }
}
Affichage
false
true
true

Les opérateurs

OpérateurSensExemple
== !=égal, différent (nombres, caractères, booléens)a == b
< <= > >=comparaisons de nombresnote >= 10
&&ET logique (s'arrête dès qu'un côté est faux)a > 0 && a < 10
||OU logique (s'arrête dès qu'un côté est vrai)c == 'o' || c == 'O'
!NON logique!estVide

! passe avant &&, qui passe avant ||. Ajoute des parenthèses dès que l'expression devient longue.

if, else if, else

Les tests sont évalués dans l'ordre et le premier qui est vrai l'emporte. Mets les accolades même pour une seule instruction.

Mention.java
public class Mention {
    public static void main(String[] args) {
        int note = 14;

        if (note >= 16) {
            System.out.println("Tres bien");
        } else if (note >= 12) {
            System.out.println("Bien");
        } else if (note >= 10) {
            System.out.println("Passable");
        } else {
            System.out.println("Insuffisant");
        }
    }
}
Affichage
Bien

ET, OU et évaluation paresseuse

Avec &&, si le côté gauche est faux, le côté droit n'est jamais évalué. On s'en sert pour se protéger : tester qu'un objet existe avant d'appeler une de ses méthodes.

Garde.java
public class Garde {
    public static void main(String[] args) {
        String texte = null;

        if (texte != null && texte.length() > 3) {
            System.out.println("texte long");
        } else {
            System.out.println("texte absent ou court");
        }
    }
}
Affichage
texte absent ou court

Inverser les deux côtés (texte.length() > 3 && texte != null) provoquerait une NullPointerException, car length() serait appelé sur null.

Comparer des String : equals, pas ==

Pour les nombres, == compare les valeurs. Pour les objets (dont les String), == compare si ce sont le même objet en mémoire, pas s'ils contiennent le même texte. Utilise toujours equals.

Comparaison.java
public class Comparaison {
    public static void main(String[] args) {
        String a = "NSI";
        String b = new String("NSI");

        System.out.println(a == b);        // deux objets différents
        System.out.println(a.equals(b));   // même texte
    }
}
Affichage
false
true

Piège : "NSI" == "NSI" vaut true, car Java réutilise les littéraux identiques. Le bug n'apparaît que lorsque la chaîne vient d'ailleurs (saisie, new String, lecture d'un fichier) : écris equals partout.

switch classique

switch compare une valeur à plusieurs constantes. Sans break, l'exécution continue dans le cas suivant (la « chute ») : c'est ce qui permet de regrouper samedi et dimanche dans l'exemple de la deuxième carte. default prend tous les autres cas.

switch fléché (Java 14 et plus)

La forme -> n'a pas de chute et peut renvoyer une valeur : elle est plus sûre et plus courte.

Saison.java
public class Saison {
    public static void main(String[] args) {
        int mois = 2;

        String saison = switch (mois) {
            case 12, 1, 2 -> "hiver";
            case 6, 7, 8 -> "ete";
            default -> "entre-saison";
        };
        System.out.println(saison);
    }
}
Affichage
hiver

L'opérateur ternaire

condition ? siVrai : siFaux est une expression ; réserve-la aux choix simples.

Ternaire.java
public class Ternaire {
    public static void main(String[] args) {
        int a = 4, b = 9;
        int max = (a > b) ? a : b;
        String parite = (a % 2 == 0) ? "pair" : "impair";

        System.out.println("max = " + max);
        System.out.println(a + " est " + parite);
    }
}
Affichage
max = 9
4 est pair

⚠️ Erreurs fréquentes

Comparer des String avec ==

À éviter
Faux.java
if (reponse == "oui") {      // compare les adresses
    System.out.println("ok");
}
Correct
Correct.java
if (reponse.equals("oui")) { // compare le texte
    System.out.println("ok");
}

= à la place de ==

Avec un int, if (n = 0) est refusé par le compilateur (« int cannot be converted to boolean ») : Java te protège. Mais avec un boolean, if (ok = true) compile et affecte true à ok. Écris simplement if (ok).

Un point-virgule après le if

À éviter
Faux.java
if (n > 0);
{
    System.out.println("positif");   // toujours exécuté
}
Correct
Correct.java
if (n > 0) {
    System.out.println("positif");
}

Enchaîner les comparaisons comme en maths

0 < x < 10 ne compile pas en Java : 0 < x donne un boolean, qu'on ne peut pas comparer à 10. Écris 0 < x && x < 10.

Oublier le break dans un switch classique

Le cas suivant s'exécute aussi. Utilise la forme fléchée -> quand ton Java le permet : elle supprime ce risque.

Comparer des réels avec ==

0.1 + 0.2 == 0.3 est false. Compare la différence à une tolérance : Math.abs(a - b) < 1e-9.

📋 Aide-mémoire

  • Une condition est un boolean : if (n != 0), jamais if (n) avec un entier.
  • if / else if / else : le premier test vrai gagne ; accolades toujours.
  • && et || s'arrêtent dès que le résultat est connu ; ! avant && avant ||.
  • Nombres et caractères : == ; objets (dont String) : .equals(...).
  • switch : break à chaque cas, ou la forme fléchée case x -> … (Java 14+) qui n'a pas de chute.
  • cond ? a : b pour un choix simple ; jamais de ; juste après if (…).