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 Ă
trueoufalse. 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
trueoufalse. 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,
.equalspour les String et.hasNextIntpour 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")retournetruecompareTo(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 || trueensuite(false) || trueet 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 :
!falsedevienttrue- Parce que
&&précÚde||, on continue avec le premier&&:(true) && falsequi donnefalse - Le deuxiÚme
&&:(false) && truequi donne encorefalse - Finalement le
||(ou) :(false) || falsedonne aussifalse.
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.
- Le choix de lâutilisateur est
"a"(String). - Le choix de lâutilisateur est
'a'(char). Indice 1 : on peut obtenir le premier caractĂšre dâune rĂ©ponse (p. ex.:pick) avecpick.charAt(0).Indice 2 : uncharest un type primitif commeint. - Il est tard mais je ne suis pas fatiguĂ©. Utilisez lâopĂ©rateur
!dans lâexpression. - Le nombre de points est plus grand que
21. - Le nombre de vies est moins que
1. - Je suis en vie et jâai lâobjet magique et jâai battu le grand boss.
- 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.
- Vous rendre sur le site codingbat.com/java
- 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.
- Dans la section
prefssous â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. - 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
returndans 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
GoaprÚ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.
- 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
charAtetsubstring) - 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
lengthetsubstring) - icyHot (utilise aussi les méthodes
Math.minetMath.max) - in1020
- hasTeen (la condition est longue ici, avec plusieurs opérateurs logiques)
- mixStart (utilise aussi les méthodes
length,substringetequals) - 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
ifetelsepour 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.