Keyboard shortcuts

Touchez ← ou → pour naviguer les chapitres

Touchez S ou / pour chercher dans le livre

Touchez ? pour afficher ce message

Touchez Esc pour masquer ce message

Accueil > Programmer avec Java > Structures de contrĂŽle >

Écrire des conditions

Survol et attentes

Un programme peut prendre des dĂ©cisions et, ainsi, devenir plus intelligent. Comme tout dans un ordinateur, ces dĂ©cisions sont Ă  base binaire, c’est-Ă -dire qu’elles sont basĂ©es sur des conditions qui sont soit vraies, soit fausses. Dans cette leçon, nous allons apprendre Ă  Ă©crire des conditions en Java. Nous allons aussi apprendre Ă  utiliser des opĂ©rateurs logiques pour combiner des conditions.

Définitions

Les conditions sont utilisĂ©es pour sĂ©lectionner une branche d’instructions parmi un choix de branches. Elles sont aussi utilisĂ©es pour dĂ©terminer si une boucle doit se rĂ©pĂ©ter ou se terminer. Il y a d’autres utilisations, comme dĂ©cider si une mĂ©thode se termine ou non, mais toutes ces applications seront vues dans des leçons sĂ©parĂ©es.

Condition
une expression boolĂ©enne, soit une expression qui s’évalue Ă  true ou false. On peut penser Ă  des conditions comme une façon formelle de poser une question oui/non Ă  un ordinateur.
boolean
type de valeur Java qui stocke la valeur true ou false. On peut utiliser ce type de valeur dans des variables qui indiquent l’état de diffĂ©rentes choses dans le programme.
Opérateur de comparaison
un opérateur qui compare deux valeurs et retourne un booléen. Les opérateurs de comparaison sont ==, !=, <, <=, >, >=.
Méthodes de comparaison
des méthodes qui comparent des objets et retournent un booléen. Par exemple, .equals pour les String et .hasNextInt pour un Scanner.
Opérateurs logiques
des opérateurs qui combinent des conditions. Les opérateurs logiques sont && (ET), || (OU) et ! (PAS).

Objectifs d’apprentissage

À la fin de cette leçon vous devrez ĂȘtre en mesure de :

  • DĂ©crire les trois types d’expressions boolĂ©ennes de base : valeur boolĂ©enne, opĂ©ration de comparaison et mĂ©thode de comparaison.
  • ReconnaĂźtre les diffĂ©rents opĂ©rateurs de comparaison : ==, !=, <, <=, > et >=.
  • DĂ©crire les trois opĂ©rateurs logiques : &&, || et !.

CritĂšres de succĂšs

  • Dans mes programmes Java, je peux Ă©crire des expressions boolĂ©ennes simples qui utilisent des valeurs boolĂ©ennes, des valeurs numĂ©riques et des Strings comme base de comparaison.

Variables booléennes (type boolean)

L’expression boolĂ©enne la plus simple est une valeur littĂ©rale boolĂ©enne : soit true (vrai), soit false (faux). On peut utiliser ces valeurs littĂ©rales directement ou assignĂ©es Ă  des variables, par exemple, boolean repeat = true;.

Une variable boolĂ©enne est pratique pour reprĂ©senter l’état de quelque chose, par exemples : repeat ci-dessus qui peut indiqur s’il faut rĂ©pĂ©ter une action ou non ou boolean isOn = true; qui peut reprĂ©senter si une fonctionnalitĂ© est activĂ©e ou non. Ce type d’usage des valeurs boolĂ©ennes s’appelle un drapeau. On peut regarder son Ă©tat dans des conditions ou modifier son Ă©tat dans le code, par exemple isOn = false; pour Ă©teindre l’ampoule.

Opérations de comparaison

Un autre type d’expression boolĂ©enne est une opĂ©ration de comparaison. Une opĂ©ration de comparaison compare deux valeurs et retourne une valeur boolĂ©enne. Par exemple, x == y est une expression de comparaison qui retourne true si x est Ă©gal Ă  y et false sinon. Les opĂ©rateurs de comparaison sont :

  • == (Ă©gal),
  • != (diffĂ©rent/pas Ă©gal),
  • < (infĂ©rieur),
  • <= (infĂ©rieur ou Ă©gal),
  • > (supĂ©rieur)
  • et >= (supĂ©rieur ou Ă©gal).

Voici quelques exemples Ă  tester dans une session jshell :

5 == 5; // notez : comparer l'égalité utilise deux "=", soit "=="
5 != 5;
5 < 5;
5 <= 5;
5 > 5;
5 >= 5;

int x = 4; // notez : assigner utilise un seul "="
int y = 5;
x == y;
x != y;
x < y;
x <= y;
x > y;
x >= y;
Quel sera le résultat de la comparaison suivante? 5 >= 6

false. L’opĂ©rateur de comparaison reprĂ©sente “plus grand ou Ă©gale à”

Considérant les valeurs de x et y ci-dessus cette comparaison donne quoi? (x + y) < (2 * x)

false. On évalue les parenthÚses en premier, donnant 9 < 8 qui est faux.

Méthodes de comparaison

Il y a aussi des mĂ©thodes de comparaison, gĂ©nĂ©ralement utilisĂ©es pour comparer diffĂ©rents objets du mĂȘme type. On doit utiliser une mĂ©thode de comparaison pour comparer des objets de type String. Par exemple, "abc".equals("abc") retourne true et "abc".equals("def") retourne false. Il y a quatre mĂ©thodes de comparaison pour les String :

  • equals (Ă©gal), par exemple "abc".equals("abc")
  • equalsIgnoreCase (Ă©gal, sans tenir compte de la casse), par exemple "abc".equalsIgnoreCase("ABC") retourne true
  • compareTo (infĂ©rieur, Ă©gal ou supĂ©rieur), qui retourne une valeur nĂ©gative si la premiĂšre valeur est infĂ©rieur, zĂ©ro si les deux valeurs sont Ă©gales et une valeur positive si la premiĂšre valeur est supĂ©rieure. Par exemple "abc".compareTo("def") retourne une valeur nĂ©gative (-3).
  • compareToIgnoreCase (infĂ©rieur, Ă©gal ou supĂ©rieur, sans tenir compte de la casse)

La raison pourquoi la comparaison directe d’objets comme des String ne fonctionne pas est expliquĂ©e dans le cours ICS4U. C’est en lien avec la reprĂ©sentation de ces valeurs en mĂ©moire versus la façon dont les valeurs primitives (comme des int) sont reprĂ©sentĂ©es en mĂ©moire.

Voici quelques exemples de comparaisons de String Ă  tester dans une session jshell :

"abc".equals("abc");
"abc".equals("def");
"abc".equals("ABC");
"abc".equalsIgnoreCase("ABC");

"abc".compareTo("def"); // donne un chiffre
"abc".compareTo("def") == 0; // tester l'égalité (donne un booléen)
"abc".compareTo("def") < 0; // tester si "abc" est inférieur à "def"
"abc".compareTo("def") > 0; // tester si "abc" est supérieur à "def"

// La comparaison se fait Ă  la base de la valeur Unicode des caractĂšres
// et les majuscules sont AVANT les minuscules dans la table Unicode
"abc".compareTo("ABC"); // donne un chiffre positif
"abc".compareTo("ABC") > 0; // tester la supériorité (donne un booléen)
"abc".compareToIgnoreCase("ABC"); // donne un chiffre
"abc".compareToIgnoreCase("ABC") == 0; // tester l'égalité (donne un booléen)

Notez que pour utiliser les mĂ©thodes compareTo comme conditions, il faut utiliser le chiffre retournĂ© par la mĂ©thode dans une expression de comparaison afin d’obtenir un rĂ©sultat true ou false.

Quelle lettre est plus "grande" du point de vu d'un ordinateur, 'a' ou 'A'?

C’est 'a'! Sa valeur ASCII de 97 est 32 de plus que la valeur ASCII de 'A' (65). Et oui, les minuscules sont “plus grandes que” les majuscules dans le tableau ASCII.

Quel est le résultat de "oui"e.equals("Oui") ?

false. Les minuscules et les majuscules sont des caractĂšres distinctes pour un ordinateur.

Quel est le résultat de "oui".equalsIgnoreCase("Oui") ?

true. La méthode spéciale .equalsIgnoreCase ignore les différences de case des lettres.

Opérateurs logiques - combiner des conditions

On peut combiner le rĂ©sultat d’expressions boolĂ©ennes avec les opĂ©rateurs logiques ET (&&) et OU (||). On peut aussi inverser le rĂ©sultat d’une expression boolĂ©enne en le prĂ©cĂ©dant avec l’opĂ©rateur PAS (!).

Comme avec d’autres opĂ©rateurs, il y a un ordre de prioritĂ©. L’opĂ©rateur PAS a la prioritĂ© la plus Ă©levĂ©e, suivi de ET et, finalement, OU. On peut utiliser des parenthĂšses pour changer l’ordre d’évaluation.

Voici quelques exemples Ă  tester dans une session jshell :

// exemples pour voir les opérateurs
true && true; // ET
true && false;
false && true;
false && false;
false || true; // OU
!true; // PAS
!false;
!true && true;
!(true && true); // effet des parenthĂšses

// exemples plus réalistes
int x = 5;
(x > 0) && (x < 10); // entre 0 et 10
(x < 0) || (x > 10); // en dehors de 0 Ă  10

// déterminer si je mange au restaurant utilisant deux variables booléennes
amHungry && restaurantOpen;

// l'équivalent de != pour la méthode de comparaison .equals()
!"abc".equals("def");
Quel est le résultat de l'opération !true ?

false. ! est l’opĂ©rateur “non” ou “inverse”, donnant toujours le contraire de la valeur qui le suit.

Quel est le résultat de l'opération "false || false || false || true" ?
tldr;
true. L’opĂ©rateur || signifie “ou”. Seulement une valeur dans la chaĂźne doit ĂȘtre vraie pour que tout soit vrai.
dĂ©tails de l’évaluation
Parce que toutes les opĂ©rations sont les mĂȘmes (||) l’évaluation progresse simplement de gauche Ă  droite donnant : (false) || false || true ensuite (false) || true et finalement (true).
Quel est le résultat de l'opération "!false && false && true || false" sachant que l'ordre des opérations est : ! avant && avant || ?

false. L’opĂ©rateur && signifie “et” et donne vrai seulement si les deux valeurs sont vraies.

Voici l’ordre d’évaluation de l’expression :

  1. !false devient true
  2. Parce que && précÚde ||, on continue avec le premier && : (true) && false qui donne false
  3. Le deuxiĂšme && : (false) && true qui donne encore false
  4. Finalement le || (ou) : (false) || false donne aussi false.

Exercices

📚 Tester la comprĂ©hension

Répondre aux questions insérées dans les notes aprÚs les exemples.

đŸ› ïž Pratique

A. Exemples à développer

Écrire des conditions appropriĂ©es pour donner true dans les situations suivantes. Utilisez des noms de variables appropriĂ©es si la valeur n’est pas fournie explicitement.

  1. Le choix de l’utilisateur est "a" (String).
  2. Le choix de l’utilisateur est 'a' (char). Indice 1 : on peut obtenir le premier caractĂšre d’une rĂ©ponse (p. ex.: pick) avec pick.charAt(0).Indice 2 : un char est un type primitif comme int.
  3. Il est tard mais je ne suis pas fatiguĂ©. Utilisez l’opĂ©rateur ! dans l’expression.
  4. Le nombre de points est plus grand que 21.
  5. Le nombre de vies est moins que 1.
  6. Je suis en vie et j’ai l’objet magique et j’ai battu le grand boss.
  7. Je veux écouter un texte de méditation et le son des vagues mais pas le son des oiseaux.

B. ProblĂšmes de logique sur le site CodingBat (Enrichissement)

Démarrer sur ce site

Codinbat est un site qui offre des problĂšmes de logique Ă  rĂ©soudre avec Java ou Python. C’est donc excellent pour pratiquer les conditions.

  1. Vous rendre sur le site codingbat.com/java
  2. En haut Ă  droite, cliquer le lien pour crĂ©ez un compte. Utiliser un courriel de votre choix et un mot de passe. Votre courriel est votre nom d’utilisateur et sert Ă  la rĂ©cupĂ©ration du mot de passe. Aucune autre information personnelle n’est requise.
  3. Dans la section prefs sous “Teacher Share” ajoutez mon adresse courriel. Vous pouvez le trouver dans le Classroom ou dans votre Gmail de l’école dans la liste des contacts. Je pourrai alors voir vos progrĂšs.
  4. Pour traduire la page, utilisez les outils de Chrome. MISE EN GARDE : Ă  utiliser seulement pour comprendre la description du problĂšme car la traduction affecte aussi le code de dĂ©marrage, brisant la syntaxe Java. Assurez-vous de changer la langue de traduction Ă  “English” aprĂšs avoir lu la description.

Astuces pour travailler dans CodingBat :

  • Votre solution pour chaque problĂšme est une valeur de retour du type spĂ©cifiĂ© dans l’explication du problĂšme et dans la signature de la mĂ©thode. Ça prend alors toujours une expression avec return dans votre code.
  • Les entrĂ©es de chaque problĂšme sont les paramĂštres de la mĂ©thode et sont dĂ©jĂ  dĂ©clarĂ©s pour vous. Vous devez utiliser ces paramĂštres dans vos conditions et autres opĂ©rations.
  • Vous testez votre solution en cliquant sur le bouton Go aprĂšs avoir Ă©crit votre code. Plusieurs cas de tests seront exĂ©cutĂ©s pour vĂ©rifier si votre solution est correcte et vous verrez exactement quels cas ont Ă©tĂ© rĂ©ussis et lesquels ont Ă©chouĂ©s. Vous pouvez tester votre solution autant de fois que vous voulez.
  • Chaque problĂšme dans cette sĂ©quence initiale de problĂšmes inclut une solution que vous pouvez consulter. AprĂšs les premiers problĂšmes, le bouton pour la solution est seulement accessible aprĂšs avoir essayĂ© le problĂšme une fois.
  • Il y a des tutoriels accessible via des liens au bas de la page qui expliquent certaines des caractĂ©ristiques des donnĂ©es (String, tableaux, dictionnaires) et des mĂ©thodes communes pour les utiliser dans ces problĂšmes. Les tutoriels sur les String seront particuliĂšrement utiles avec les problĂšmes de dĂ©marrage.
Exercices avec les conditions

C’est fort possible que vous ayez de la difficultĂ© avec plusieurs de ces casse-tĂȘtes. C’est normal! Si vous avez de la difficultĂ©, essayez de comprendre la solution fournie et de la réécrire vous-mĂȘme. Le but est de vous familiariser avec les conditions et les opĂ©rateurs logiques afin que vous puissiez les utiliser dans des contextes de votre choix pas dans le contexte de problĂšmes de logique.

  1. Faire les problĂšmes suivants : les solutions Ă  ces problĂšmes utilisent uniquement des comparaisons et des opĂ©rateurs de logique (&&, ||, !), en plus de quelques opĂ©rations mathĂ©matiques ou sur les String Ă  l’occasion. Les problĂšmes Ă  tenter sont dans la section Warmup-1 :
    • sleepIn
    • monkeyTrouble
    • makes10
    • nearHundred (utilise aussi la mĂ©thode Math.abs)
    • missingChar (utilise aussi la mĂ©thode substring)
    • backAround (utilise aussi les mĂ©thodes charAt et substring)
    • or35 (utilise l’opĂ©rateur modulo % pour trouver le reste de la division par 3 ou 5)
    • startHi (attention! la condition est assez complexe ici; utilise les mĂ©thodes length et substring)
    • icyHot (utilise aussi les mĂ©thodes Math.min et Math.max)
    • in1020
    • hasTeen (la condition est longue ici, avec plusieurs opĂ©rateurs logiques)
    • mixStart (utilise aussi les mĂ©thodes length, substring et equals)
    • lastDigit (utilise aussi l’opĂ©rateur modulo % pour trouver le reste de la division par 10)

Certaines solutions officielles Ă  ces problĂšmes utilisent la sĂ©lection avec if et else pour rĂ©soudre les problĂšmes, mais si le problĂšme est dans la liste ci-dessus, vous ĂȘtes capable de remplacer cet embranchement en utilisant les opĂ©rateurs logiques ET && et OU || pour produire une seule expression Ă©quivalente.

© 2022-2025 David Crowley