- Apprendre
- Informatique et numérique
- Programmation
- Java orienté objet : classes, collections, héritage et tests
- Conditions et boucles en Java
Conditions et boucles en Java
if, des enchaînements de else if et des expressions switch, puis répète des instructions avec des boucles while, do-while et for, en utilisant break et continue lorsqu’ils sont utiles. Applique ensuite les schémas de boucle courants pour compter, calculer une somme ou une moyenne, trouver la plus grande valeur, effectuer une recherche et afficher des tables, puis vérifie tes boucles en suivant leur exécution à chaque passage.DébutantUnité 2 sur 11 de la formation Formation : Java orienté objet : classes, collections, héritage et tests
Ce que tu vas apprendre
- Construis des conditions vraies ou fausses à partir de comparaisons et combine-les avec des opérateurs logiques pour qu’un programme teste exactement la situation voulue.
- Compare des valeurs et stocke les résultats sous forme de booléensUtilise les six opérateurs de comparaison sur des nombres et des caractères, conserve les résultats dans des variables
booleanet compare correctement les chaînes et les nombres décimaux. - Combine des conditions avec &&, || et !Relie et nie des conditions avec les opérateurs logiques, prévois leurs résultats à l’aide de tables de vérité et utilise l’évaluation en court-circuit et les lois de De Morgan pour écrire des tests corrects et lisibles.
- Compare des valeurs et stocke les résultats sous forme de booléens
- Fais exécuter différentes instructions à un programme selon des conditions, depuis un simple
ifjusqu’aux enchaînements deelse if, à l’opérateur conditionnel et àswitch.- Exécute du code sous condition avec if et elseÉcris des instructions
ifetif-elseavec des blocs corrects, évite les erreurs classiques d’accolades, de point-virgule et de portée, et imbrique des décisions ou choisis une valeur avec l’opérateur conditionnel. - Choisis un cas parmi plusieurs avec des enchaînements de else ifUtilise des enchaînements de
else ifpour choisir exactement un résultat parmi plusieurs, ordonne correctement les conditions et teste les limites pour qu’aucune valeur ne soit oubliée ou incluse dans deux cas. - Sélectionne un cas selon une valeur avec switchUtilise des instructions
switchet des expressionsswitchpour choisir selon la valeur d’une variable, avec des cas à flèche, plusieurs étiquettes par cas,defaultetyield, et reconnais l’enchaînement des cas dans l’ancienne forme avec deux-points.
- Exécute du code sous condition avec if et else
- Écris des boucles
while,do-whileetforqui s’exécutent le bon nombre de fois et s’arrêtent quand elles le doivent, et contrôle-les avecbreaketcontinue.- Répète des instructions tant qu’une condition est vraie avec whileÉcris des boucles
whilequi démarrent, se mettent à jour et s’arrêtent correctement, utilisewhile (true)avecbreakpour une répétition sans durée prédéfinie et suis l’exécution d’une boucle passage par passage. - Exécute le corps de la boucle au moins une fois avec do-whileUtilise la boucle
do-whilelorsque le corps doit s’exécuter avant le premier test, comme pour les vérifications de saisie et les menus, et évite ses pièges liés à la portée et au point-virgule. - Parcours des intervalles de valeurs avec des boucles forÉcris des boucles
forqui comptent en montant, en descendant et par pas, prévois leur nombre d’exécutions, évite les erreurs de décalage d’une unité et choisis le type de boucle adapté à une tâche. - Quitte une boucle ou passe à l’itération suivante avec break et continueMets fin à une boucle de façon anticipée avec
break, saute le reste d’un passage aveccontinue, quitte des boucles imbriquées avec unbreakétiqueté et garde les boucles à sortie anticipée faciles à suivre.
- Répète des instructions tant qu’une condition est vraie avec while
- Reconnais et combine les schémas de boucle courants : compter et calculer des sommes, trouver des extrema, effectuer des recherches, traiter des chiffres et imbriquer des boucles, puis vérifie les boucles en suivant et en testant leur exécution.
- Compte des valeurs et calcule leur somme et leur moyenneUtilise des compteurs et des accumulateurs avec une saisie contrôlée par une sentinelle, calcule des moyennes et des pourcentages sans erreur de division entière et protège tes calculs contre une saisie vide et un dépassement de capacité.
- Trouve des extrema, effectue des recherches et traite des chiffresSuis la plus grande ou la plus petite valeur rencontrée jusque-là, effectue une recherche avec un indicateur booléen ou une sortie anticipée, vérifie si une valeur au moins ou toutes les valeurs respectent une condition et décompose les nombres chiffre par chiffre.
- Imbrique des boucles, puis suis leur exécution et teste-lesÉcris des boucles imbriquées pour produire des tables et des motifs, prévois le nombre d’exécutions du corps interne, suis l’exécution des boucles dans un tableau et teste-les avec des cas limites pour trouver les erreurs de décalage d’une unité et les boucles infinies.
- Compte des valeurs et calcule leur somme et leur moyenne
Conditions et boucles en Java : cours
1Construis des conditions vraies ou fausses
Une condition transforme une question sur les données du programme en une valeur vraie ou fausse. Les comparaisons permettent de demander si un nombre atteint une limite ou si un texte correspond à une commande ; les opérateurs logiques permettent de relier ces tests. Lis les parties d’une condition dans l’ordre où Java les évalue, puis vérifie le résultat combiné. Tu peux ainsi exprimer un intervalle, une exception ou une condition de garde pour une division sans laisser une petite erreur d’opérateur modifier la règle.
1.1 Comparaisons et valeurs booléennes
Une condition est de type boolean : elle produit true ou false. Java a besoin de ce résultat explicite dans une condition de if ou de boucle. Un entier seul n’est pas une condition, donc while (count) ne compile pas ; count > 0 pose une question claire dont la réponse est vraie ou fausse.
Compare des nombres et des caractères
| Opérateur | Question |
|---|---|
< | La valeur de gauche est-elle plus petite ? |
<= | Est-elle plus petite ou égale ? |
> | Est-elle plus grande ? |
>= | Est-elle plus grande ou égale ? |
== | Les valeurs sont-elles égales ? |
!= | Les valeurs sont-elles différentes ? |
Avec int a = 7; et int b = 10;, a < b et a != b valent true, tandis que a >= b vaut false. Des types numériques différents peuvent être comparés : 3 == 3.0 vaut true après que Java a converti l’entier en double par conversion élargissante.
Une comparaison de char utilise les numéros de code Unicode. Par exemple, 'a' < 'b' vaut true. C’est aussi le cas de 'Z' < 'a' : leurs codes sont 90 et 97. Dans cet ordre, toutes les lettres majuscules ASCII de A à Z précèdent les lettres minuscules de a à z.
Stocke une réponse utile
int age = 17;
boolean isAdult = age >= 18;
System.out.println(isAdult);
La comparaison donne false, qui est stocké dans isAdult puis affiché. Un nom qui a un sens permet au code suivant d’écrire directement if (isAdult).
Distingue l’affectation de la comparaison. = stocke une valeur ; == compare des valeurs. Pour un entier, if (x = 5) échoue, car l’affectation produit un entier. Pour un booléen, if (done = true) compile, affecte true à done et exécute la branche. Pour tester l’indicateur existant, écris if (done).
Compare du texte et des nombres décimaux calculés
Utilise command.equals("quit") pour comparer les caractères d’une chaîne. Le texte saisi « quit » correspond ; « Quit » ne correspond pas. Utilise equalsIgnoreCase lorsque la casse ne doit pas compter et !command.equals("quit") pour vérifier que le texte est différent. L’opérateur == vérifie si les chaînes désignent le même objet : il ne convient donc pas pour comparer le contenu d’une saisie utilisateur.
La représentation binaire en virgule flottante ne permet pas de stocker exactement de nombreuses fractions décimales. 0.1 + 0.2 produit 0.30000000000000004, donc 0.1 + 0.2 == 0.3 vaut false. Une comparaison avec tolérance vérifie l’écart entre les valeurs calculées :
double sum = 0.1 + 0.2;
boolean closeEnough = Math.abs(sum - 0.3) < 1e-9;
Ici, Math.abs rend la différence positive ou nulle ; la très petite différence est inférieure à 1e-9, donc closeEnough vaut true. Choisis une tolérance adaptée à la précision requise par le calcul. Les comparaisons exactes de valeurs int ne présentent pas de problème d’arrondi en virgule flottante.
Teste la divisibilité et les intervalles
n % 3 == 0 vérifie si un entier est divisible par 3. Pour les nombres impairs, utilise n % 2 != 0 : le test inclut les valeurs impaires négatives, puisque -7 % 2 vaut -1.
Écris séparément chaque partie d’un test d’intervalle : 0 < x && x < 10. Java ne peut pas lire 0 < x < 10 comme une chaîne de comparaisons mathématiques : la première comparaison produit déjà un booléen, qui ne peut pas être comparé à 10.
Points clés
- Une condition doit produire un
boolean. - Utilise
=pour affecter une valeur et==pour comparer des valeurs numériques. - Compare le contenu des chaînes avec
equalsouequalsIgnoreCase. - Compare les nombres décimaux calculés avec une tolérance adaptée.
- Utilise
n % 2 != 0pour les entiers impairs, y compris les négatifs.
1.2 Conditions composées et évaluation en court-circuit
Les opérateurs logiques combinent des conditions complètes, vraies ou fausses. Lis une condition composée comme une règle portant sur les données, puis teste des valeurs qui devraient la respecter et d’autres qui ne devraient pas la respecter.
Relie et nie des tests
&& signifie et : les deux parties doivent être vraies. || signifie ou : au moins une partie doit être vraie, y compris lorsque les deux le sont. ! signifie non et inverse une valeur booléenne.
| p | q | p && q | p || q |
| --- | --- | --- | --- |
| true | true | true | true |
| true | false | false | true |
| false | true | false | true |
| false | false | false | false |
Pour une température confortable de 18 à 24 °C inclus, il faut tester les deux bornes : temp >= 18 && temp <= 24. Être hors de cet intervalle signifie temp < 18 || temp > 24. Relier les bornes de l’intervalle avec || accepte tous les nombres : en dessous de 18, le test de la borne supérieure est vrai, et au-dessus de 24, le test de la borne inférieure est vrai.
Chaque opérande doit être une expression booléenne. Écris x == 1 || x == 2, car x == 1 || 2 place un entier là où un booléen est requis. Pour un entier, !x > 5 n’est pas valide ; !(x > 5) nie toute la comparaison.
Évalue uniquement ce qui est nécessaire
Java évalue && et || de gauche à droite et court-circuite l’évaluation lorsque la partie gauche détermine le résultat. Avec &&, un côté gauche faux fait ignorer le côté droit. Avec ||, un côté gauche vrai le fait ignorer.
int total = 36;
int count = 0;
boolean largeAverage = count != 0 && total / count > 10;
La première comparaison est fausse, donc la division est ignorée et largeAverage prend la valeur false. Inverse les opérandes et la division a lieu avant la condition de garde ; une division entière par zéro lève une ArithmeticException. Place la vérification de sécurité avant le calcul qu’elle protège.
Rends le regroupement visible
De la plus forte à la plus faible, les priorités des opérateurs concernés sont : !, les comparaisons d’ordre (<, <=, >, >=), les comparaisons d’égalité (==, !=), &&, puis ||. Ainsi, a || b && c se regroupe sous la forme a || (b && c). Lorsque a est vrai et que b et c sont faux, cette expression est vraie ; (a || b) && c est fausse. Les parenthèses montrent la règle voulue.
Les lois de De Morgan déplacent une négation à travers une condition composée :
!(p && q)équivaut à!p || !q.!(p || q)équivaut à!p && !q.
Nie chaque partie et intervertis l’opérateur qui les relie. Appliqué à l’intervalle de température, cela donne !(temp >= 18 && temp <= 24) équivalent à temp < 18 || temp > 24.
Exprime une règle avec une exception
Dans le calendrier grégorien, une année bissextile est divisible par 4, sauf qu’une année séculaire doit être divisible par 400 :
boolean leap = (year % 4 == 0 && year % 100 != 0)
|| year % 400 == 0;
La première partie accepte 2024. Elle rejette 1900 parce que 1900 est une année séculaire ; le dernier test accepte 2000 parce qu’elle est divisible par 400. L’année 2026 ne satisfait aucune des deux parties.
Des booléens nommés facilitent la lecture des tests plus longs, comme isWeekend || isHoliday. Pour deux booléens, ^ est le OU exclusif : un seul opérande doit être vrai, comme avec !=. Les opérateurs simples & et | calculent aussi le et et le ou booléens, mais évaluent les deux opérandes ; utilise && et || pour les conditions évaluées en court-circuit.
Points clés
&&exige que les deux conditions soient vraies ;||exige qu’au moins l’une d’elles le soit.- Une condition de garde évaluée en court-circuit se place avant l’expression qu’elle protège.
&&est prioritaire sur||; les parenthèses peuvent changer le résultat.- Les lois de De Morgan nient les deux parties et intervertissent
&&et||. - Chaque côté d’un opérateur logique doit être une expression booléenne complète.
- Les opérateurs simples
&et|évaluent les deux opérandes.
2Choisis le chemin suivi par un programme
Une décision dirige l’exécution vers un chemin choisi. Un seul test peut déclencher une action, deux branches peuvent choisir entre deux actions et un enchaînement peut affecter un résultat parmi plusieurs intervalles. Lorsque le choix dépend des valeurs exactes d’une variable, switch offre une autre forme claire. Suivre le chemin consiste à vérifier quelles conditions sont atteintes, quelle branche s’exécute et quelles variables restent disponibles ensuite.
2.1 Branches, blocs et choix de valeurs
Un if exécute un bloc lorsque sa condition est vraie. Un if avec un else choisit exactement l’un de deux blocs. Une fois le bloc choisi terminé, l’exécution continue avec l’instruction suivante.
Choisis un chemin
int age = 16;
if (age >= 18) {
System.out.println("Adult ticket");
} else {
System.out.println("Youth ticket");
}
System.out.println("Next customer");
La condition est fausse, donc la sortie est « Youth ticket », suivi de « Next customer ». La dernière instruction n’appartient à aucune des deux branches. Place la condition booléenne entre parenthèses et les instructions de chaque branche entre accolades.
Sans accolades, seule l’instruction suivante appartient à un if. L’indentation ne regroupe pas le code. Dans cet exemple incorrect, le deuxième message apparaît pour chaque score :
if (score < 50)
System.out.println("Not passed");
System.out.println("Try again");
Des accolades autour des deux instructions d’affichage rendent les deux conditionnelles. Une autre erreur consiste à placer un point-virgule immédiatement après la condition : if (x > 10); a un corps vide. Un bloc qui le suit s’exécute indépendamment et un else placé après ce bloc indépendant n’a pas de if correspondant.
Garde un résultat disponible
Une variable déclarée dans un bloc n’est visible qu’à l’intérieur de ce bloc. Déclare un résultat avant les branches lorsque le code suivant en a besoin :
String ticket;
if (age >= 18) {
ticket = "Adult ticket";
} else {
ticket = "Youth ticket";
}
System.out.println(ticket);
Les deux chemins possibles affectent une valeur à ticket, donc son affichage ensuite est valide. Si seule la branche correspondant à la condition vraie lui affectait une valeur, Java rejetterait sa lecture ultérieure : la variable pourrait ne pas avoir été initialisée. Déclarer ticket séparément dans chaque branche ne laisserait pas non plus de ticket disponible après la décision.
Place une décision dans une autre
Un if imbriqué n’exécute son test que lorsque l’exécution atteint la branche qui le contient :
if (hasTicket) {
if (age < 12) {
System.out.println("Child seat");
} else {
System.out.println("Standard seat");
}
} else {
System.out.println("Buy a ticket first");
}
Une personne sans billet atteint le else externe ; la vérification de l’âge est ignorée. Si les deux tests imbriqués ne font que protéger la même action et qu’aucun des deux n’a de else, ils peuvent devenir if (hasTicket && age < 12).
La règle du else pendant rattache un else au if le plus proche qui n’a pas encore de branche alternative. Sans accolades, l’aligner visuellement sur un if externe ne change pas cette règle. Pour un test externe vérifiant que x est positif, suivi d’un test interne vérifiant que y est positif, le else suivant appartient au test de y. Des accolades autour de toute la décision interne sont nécessaires lorsque le else doit appartenir au test externe.
Choisis une valeur avec ?:
L’opérateur conditionnel choisit l’une de deux valeurs :
int n = 7;
String label = n % 2 == 0 ? "even" : "odd";
La condition est fausse, donc l’expression donne « odd ». Sa forme est condition ? valueIfTrue : valueIfFalse. Utilise-le pour un choix court entre deux valeurs ; utilise un if lorsque les branches effectuent plusieurs actions. Des expressions conditionnelles imbriquées rendent rapidement le chemin choisi difficile à suivre.
Points clés
- Les accolades regroupent toutes les instructions qui appartiennent à une branche.
- Un
elsese rattache auifle plus proche qui n’a pas encore de branche alternative. - Un résultat nécessaire après une décision doit être accessible et avoir reçu une valeur sur chaque chemin qui mène à son utilisation.
?:choisit une valeur parmi deux expressions.
2.2 Cas ordonnés et valeurs aux limites
Un enchaînement de else if teste les conditions dans l’ordre et sélectionne la première qui est vraie. Une fois cette branche exécutée, les conditions restantes sont ignorées. Un else final traite les valeurs restantes ; sans lui, l’enchaînement peut n’effectuer aucune action.
Ordonne des seuils qui se chevauchent
Pour des scores de 0 à 100, teste d’abord la note la plus élevée :
String grade;
if (score >= 90) {
grade = "A";
} else if (score >= 80) {
grade = "B";
} else if (score >= 70) {
grade = "C";
} else if (score >= 60) {
grade = "D";
} else {
grade = "F";
}
Pour 85, le premier test échoue et le deuxième réussit. Le programme affecte « B » sans vérifier les seuils restants. Atteindre score >= 80 signifie déjà que le score est inférieur à 90 : une borne supérieure supplémentaire est donc inutile.
Si score >= 60 apparaissait en premier, chaque score permettant de réussir recevrait « D ». Va du cas correspondant le plus restrictif vers les cas plus larges. Cet ordre compte, car plusieurs conditions peuvent être vraies même si une seule branche s’exécute.
Traite d’abord le cas combiné
FizzBuzz comporte un cas particulier où deux règles se chevauchent : les multiples de 3 et de 5 doivent donner « FizzBuzz ». Teste ce cas avant chacun des tests de divisibilité pris séparément :
if (n % 15 == 0) {
System.out.println("FizzBuzz");
} else if (n % 3 == 0) {
System.out.println("Fizz");
} else if (n % 5 == 0) {
System.out.println("Buzz");
} else {
System.out.println(n);
}
Le test % 15 == 0 accepte 30 ; 9 mène à « Fizz », 10 à « Buzz » et 7 à la branche finale. Commencer par % 3 == 0 accepterait 30 trop tôt et n’afficherait que « Fizz ».
Choisis un résultat ou plusieurs actions
Des instructions if distinctes sont des décisions indépendantes. Avec x = 15, un if (x > 10) peut afficher « big » et un if (x > 0) placé ensuite peut aussi afficher « positive ». Les relier avec else if rend le second test inaccessible chaque fois que le premier est vrai. Utilise des tests indépendants lorsque les deux actions peuvent être nécessaires ; utilise un enchaînement pour sélectionner un seul résultat.
Vérifie les bornes et les valeurs invalides
Un enchaînement pour une température entière avec temp < 10, puis temp > 10 && temp < 25, puis temp >= 25 oublie 10 exactement. Remplace le deuxième test par temp < 25 : l’atteindre signifie déjà que le premier test a échoué, donc que la valeur est au moins égale à 10. Un else final traite alors 25 et les valeurs supérieures.
Pour chaque seuil, essaie la valeur juste en dessous, le seuil lui-même et la valeur juste au-dessus. Pour l’enchaînement des scores, 89, 90 et 91 révèlent si la borne de A est correctement incluse. Teste aussi les limites globales.
Valide un score avant de lui attribuer une note : place score < 0 || score > 100 en premier et signale « Invalid score » dans ce cas. Les branches suivantes ne traitent alors que des scores valides ; 150 ne peut pas recevoir « A » par accident. La validation est un premier cas distinct, et non une correction après le choix de la note.
Points clés
- La première condition vraie d’un enchaînement sélectionne la seule branche qui s’exécute.
- Place les cas plus restreints qui se chevauchent avant les cas plus larges.
- Utilise des instructions
ifdistinctes lorsque plusieurs actions peuvent s’appliquer. - Teste les valeurs à chaque seuil et juste à côté.
- Rejette les saisies invalides avant de classer les saisies valides.
2.3 Cas switch et résultats d’expression
Un switch sélectionne un cas en comparant une valeur à des étiquettes fixes. Il convient aux commandes nommées et aux choix numérotés. Utilise un enchaînement de else if lorsque le choix dépend d’un intervalle ou de plusieurs variables.
Fais correspondre des valeurs exactes
Un switch sur une valeur accepte des sélecteurs char, byte, short, int, leurs types enveloppes, String et les types énumérés. Sans fonctionnalités expérimentales, les sélecteurs long, float, double et boolean ne sont pas pris en charge. Les étiquettes doivent être des constantes : une condition comme score >= 90 n’est pas une étiquette de valeur.
switch (day) {
case 1, 2, 3, 4, 5 -> System.out.println("Weekday");
case 6, 7 -> System.out.println("Weekend");
default -> System.out.println("Invalid day");
}
Un cas avec flèche n’exécute que son propre code, sans enchaînement vers le cas suivant. Les virgules regroupent plusieurs étiquettes pour une action. Un jour égal à 6 affiche « Weekend » ; un jour égal à 9 ne correspond à aucune valeur listée et affiche « Invalid day ».
Les étiquettes de chaînes correspondent à un contenu exact, sensible à la casse. Une commande « Start » ne correspond pas à case "start". Une étiquette en double provoque une erreur de compilation, et un même switch ne peut pas mélanger des cas avec flèche et des cas avec deux-points.
Produis une valeur
Une expression switch calcule un résultat :
int days = switch (month) {
case 1, 3, 5, 7, 8, 10, 12 -> 31;
case 4, 6, 9, 11 -> 30;
case 2 -> 28;
default -> 0;
};
Dans une année non bissextile, le mois 9 donne 30, le mois 2 donne 28 et le mois invalide 13 donne 0. Le point-virgule après l’accolade fermante termine la déclaration de la variable.
Une expression doit être exhaustive : chaque valeur possible du sélecteur doit avoir un résultat. Pour ces exemples avec int et String, inclus default. Une instruction switch sur une valeur peut omettre default ; une valeur sans correspondance n’exécute alors aucun cas. Une expression qui produit une valeur ne peut pas simplement omettre de produire son résultat.
Donne un résultat à un bloc avec yield
Un cas qui effectue un calcul avant de choisir sa valeur nécessite un bloc :
int days = switch (month) {
case 2 -> {
boolean leap = (year % 4 == 0 && year % 100 != 0)
|| year % 400 == 0;
yield leap ? 29 : 28;
}
case 4, 6, 9, 11 -> 30;
case 1, 3, 5, 7, 8, 10, 12 -> 31;
default -> 0;
};
yield fournit la valeur du cas à l’expression switch. Février donne 29 en 2024 et 28 en 2026. Une seule expression après une flèche, comme case 2 -> 28;, n’a pas besoin de yield.
Lis l’ancienne forme avec deux-points
switch (level) {
case 1:
System.out.println("Bronze");
case 2:
System.out.println("Silver");
break;
case 3:
System.out.println("Gold");
break;
}
Pour le niveau 1, l’exécution entre dans le premier cas et continue dans le deuxième, affichant à la fois « Bronze » et « Silver ». C’est l’enchaînement des cas : une étiquette avec deux-points n’arrête pas l’exécution. break termine le switch. Des étiquettes successives avec deux-points peuvent partager volontairement une action ; un break manquant après une action peut exécuter accidentellement la suivante.
Un switch sur char peut regrouper 'a', 'e', 'i', 'o', 'u' pour donner « vowel », avec default donnant « other ». Le même principe de valeur exacte s’applique aux caractères, aux commandes et aux choix numériques.
Points clés
- Utilise
switchpour des étiquettes fixes d’un même sélecteur. - Les cas avec flèche ne s’enchaînent pas.
- Une expression switch doit produire un résultat pour chaque valeur possible du sélecteur.
- Un cas constitué d’un bloc fournit son résultat à l’expression avec
yield. - Un cas avec deux-points peut s’enchaîner avec le suivant sans
break. - Les cas portant sur des chaînes correspondent à un contenu exact, sensible à la casse.
3Contrôle la répétition et l’arrêt
La répétition dépend à la fois d’une condition et d’un changement d’état du programme. Suis une boucle depuis ses valeurs initiales jusqu’à son test, son corps et sa mise à jour pour voir quand elle s’arrête. Les trois formes de boucle placent ces éléments à différents endroits : avant le corps, après celui-ci ou ensemble dans un en-tête. Les sorties anticipées et les passages sautés ajoutent des possibilités utiles, mais rendent aussi nécessaire un suivi attentif de l’ordre d’exécution.
3.1 Tests d’une boucle while et changements d’état
Une boucle while teste sa condition avant chaque passage. Si la condition est vraie, Java exécute le corps et revient au test. Si elle est fausse, l’exécution continue après la boucle. Un premier test faux signifie qu’il n’y a aucun passage.
Suis le départ, le test, le corps et la mise à jour
int i = 1;
while (i <= 5) {
System.out.println(i);
i++;
}
La valeur initiale est 1. Chaque passage affiche la valeur actuelle puis l’augmente. Le cinquième passage affiche 5 et porte i à 6. Le test suivant est faux, donc la boucle se termine. Le corps s’exécute cinq fois, mais la condition est testée six fois : une fois avant chaque passage et une dernière fois avec un résultat faux.
Une boucle de comptage a besoin d’une valeur initiale, d’un test et d’une mise à jour qui la rapproche de l’arrêt. Sans i++, cette boucle affiche 1 indéfiniment. Un point-virgule placé par erreur est un autre piège : dans while (i <= 5);, l’instruction vide est le corps. Lorsque i commence dans l’intervalle, le bloc suivant n’est jamais atteint et ne peut pas le mettre à jour.
Arrête-toi lorsqu’une limite est franchie
L’égalité est souvent un test d’arrêt fragile. En partant de 0 et en ajoutant 3, on obtient 0, 3, 6, 9, 12, et ainsi de suite. Le test i != 10 ne peut pas détecter le franchissement de 10, car 10 est sauté. Le test i < 10 termine la boucle après le traitement de 9. Choisis une borne qui correspond au sens de la mise à jour.
Certaines boucles se répètent un nombre inconnu de fois. Par exemple :
int amount = 1;
int days = 0;
while (amount < 1000) {
amount *= 2;
days++;
}
Chaque passage double la quantité et compte un jour. Après neuf passages, elle vaut 512 ; après dix, elle vaut 1 024. Le test faux à 1 024 laisse days égal à 10. Une boucle peut se terminer au-dessus de son seuil lorsque la mise à jour avance par pas plus grands.
Lis avant de décider de t’arrêter
while (true) {
String line = scanner.nextLine();
if (line.equals("stop")) {
break;
}
System.out.println("You wrote: " + line);
}
Ici, scanner est le Scanner utilisé pour la saisie. La boucle lit une ligne, vérifie si elle contient « stop » et ne réaffiche que les lignes ordinaires. La commande d’arrêt est lue, mais pas traitée. while (true) a besoin d’une sortie accessible pour se terminer ; une boucle qui continue à se répéter sans sortir est une boucle infinie.
Suis les changements d’état
Considère un produit :
int n = 3;
int product = 1;
while (n > 0) {
product *= n;
n--;
}
| Moment | product | n |
|---|---|---|
| Avant la boucle | 1 | 3 |
| Après le passage 1 | 3 | 2 |
| Après le passage 2 | 6 | 1 |
| Après le passage 3 | 6 | 0 |
La multiplication utilise l’ancienne valeur de n, puis la décrémentation a lieu. Déplacer la décrémentation avant la multiplication changerait les valeurs multipliées.
Déclare un résultat cumulé avant la boucle pour qu’il soit conservé d’un passage à l’autre. Une variable déclarée dans le corps est créée à nouveau chaque fois que l’exécution atteint sa déclaration. Affiche le résultat dans le corps pour voir les résultats intermédiaires ; affiche-le après l’accolade fermante pour montrer une fois le résultat final.
Points clés
- Une boucle
whilepeut ne s’exécuter aucune fois. - Suis l’évaluation de la condition avant chaque passage, y compris le test final qui est faux.
- Les boucles de comptage ont besoin d’une mise à jour qui les rapproche d’une borne d’arrêt.
- Une commande d’arrêt doit être vérifiée avant que la saisie correspondante soit traitée.
- Conserve les résultats cumulés à l’extérieur du corps de la boucle.
3.2 Vérifications de saisie avec do-while
Une boucle do-while exécute le corps avant de vérifier si un autre passage est nécessaire. Utilise-la lorsque la première action doit avoir lieu, par exemple pour afficher un menu ou demander une valeur à saisir.
Teste après la première action
int i = 10;
do {
System.out.println(i);
i++;
} while (i < 5);
Le corps affiche 10 et incrémente i jusqu’à 11. Ce n’est qu’ensuite que Java teste i < 5. La condition est fausse, donc il n’y a pas de deuxième passage. Une boucle while (i < 5) partant de 10 n’afficherait rien.
Le point-virgule après le while (...) final est obligatoire. Il termine l’instruction do-while. Cela diffère du point-virgule placé par erreur après l’en-tête d’un while à test initial, qui crée un corps de boucle vide.
Répète tant que la saisie est invalide
int rating;
do {
System.out.print("Rating (1-5): ");
rating = Integer.valueOf(scanner.nextLine());
} while (rating < 1 || rating > 5);
L’invite apparaît avant la première vérification : l’utilisateur peut donc fournir la valeur à vérifier. Avec les saisies 7, puis 0, puis 4, les deux premières évaluations de la condition sont vraies et déclenchent une nouvelle invite. La dernière est fausse, donc la boucle se termine avec rating égal à 4.
La condition décrit la poursuite de la boucle, pas l’acceptation. Une note valide satisfait rating >= 1 && rating <= 5. La boucle se répète tant que cette expression est fausse, ce que les lois de De Morgan réécrivent sous la forme rating < 1 || rating > 5. Une conjonction entre ces bornes extérieures ne serait jamais vraie : un nombre ne peut pas être inférieur à 1 et supérieur à 5 en même temps.
Déclare la variable vérifiée avant le bloc
L’accolade fermante termine la portée du corps avant l’évaluation de la condition. Une déclaration comme int rating dans le bloc do ne serait donc pas accessible dans la condition finale. Déclare la variable avant do et affecte-lui la saisie dans le corps. L’affectation s’exécute toujours avant le premier test.
Le même placement compte lorsque la valeur acceptée est utilisée ensuite. rating reste accessible après toute la boucle et contient alors la dernière valeur lue.
Garde un menu ouvert
String choice;
do {
System.out.println("a: show status, q: quit");
choice = scanner.nextLine();
if (choice.equals("a")) {
System.out.println("Ready");
}
} while (!choice.equals("q"));
Chaque passage affiche le menu et lit un choix. Saisir « a » affiche « Ready » et répète la boucle. Saisir « q » saute l’action et met fin à la boucle au niveau de la condition. Une commande inconnue provoque aussi une répétition, car elle n’est pas « q ».
Lorsque son corps ne contient aucun continue ciblant la boucle, une boucle do-while peut être réécrite avec while (true) et un break en bas du corps, associé à la condition niée. Un continue demande une attention particulière dans une telle réécriture : dans la boucle do-while d’origine, il passe à la condition, tandis que dans une boucle while-true, il revient en haut et peut sauter ce test ajouté en bas.
Points clés
- Le corps d’une boucle do-while s’exécute avant son premier test.
- Le point-virgule final est obligatoire.
- Déclare une variable à l’extérieur du corps lorsque la condition en a besoin.
- Pour valider une saisie, répète la boucle tant que la valeur est invalide.
3.3 Intervalles et bornes des boucles for
Une boucle for regroupe le contrôle d’un comptage dans un seul en-tête. Elle est utile lorsque tu connais l’intervalle ou le nombre de passages avant le début de la répétition.
Lis l’en-tête dans l’ordre d’exécution
for (int i = 1; i <= 5; i++) {
System.out.println(i);
}
L’initialisation s’exécute une fois et affecte 1 à i. Java teste i <= 5, exécute le corps si la condition est vraie, exécute i++ et revient au test. La mise à jour est écrite dans l’en-tête, mais s’exécute après le corps. Le dernier test faux termine la boucle.
Pour un comptage ordinaire, i++ et ++i ont le même effet à l’emplacement de la mise à jour, car la valeur d’aucune des deux expressions n’est utilisée. Garde les modifications du compteur dans l’en-tête pour que la suite soit facile à prévoir.
Choisis la première et la dernière valeur
| En-tête | Valeurs utilisées par le corps | Passages |
|---|---|---|
int i = 0; i < 5; i++ | 0 à 4 | 5 |
int i = 0; i <= 5; i++ | 0 à 5 | 6 |
int i = 10; i >= 1; i-- | 10 à 1 | 10 |
int i = 0; i <= 20; i += 5 | 0, 5, 10, 15, 20 | 5 |
Pour des pas croissants d’une unité, lorsque la borne de fin est supérieure ou égale à celle de départ, une borne de fin exclue donne un nombre de passages égal à la fin moins le départ ; une borne de fin incluse ajoute un passage. Avec des pas plus grands, il faut lister ou compter les valeurs réellement atteintes. Une boucle décroissante doit tester dans le sens correspondant : partir de 10 avec i <= 1 ne donne aucun passage.
Une erreur de décalage d’une unité inclut ou exclut une borne à tort. Pour afficher les nombres de 1 à 10, i < 10 oublie 10 ; utilise i <= 10. Vérifie la première valeur utilisée dans le corps, la dernière et la première valeur qui ne satisfait pas la condition.
Construis un résultat sur un intervalle
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println(sum);
Le corps ajoute chaque entier une fois et se termine à 5 050. Un produit commence différemment : initialise product à 1 avant de multiplier par les nombres de 1 à 5. Cela donne 120 ; commencer à 0 laisserait le produit à 0 après chaque multiplication.
Surveille la portée et les corps vides
Un compteur déclaré dans l’en-tête existe pendant toute la boucle, mais pas après son accolade fermante. Déclare-le plus tôt si le code suivant a besoin de sa valeur finale.
Un point-virgule immédiatement après l’en-tête constitue un corps vide. Dans for (int i = 0; i < 3; i++);, l’instruction vide s’exécute trois fois. Un bloc suivant qui affiche « Hello » s’exécute une fois après la boucle, pas trois fois. Les accolades se placent directement après l’en-tête.
Toute partie de l’en-tête peut être omise. for (;;) { ... } n’a pas de condition d’arrêt et se comporte comme while (true) ; il lui faut une sortie comme break pour se terminer.
Choisis la boucle la plus claire
| Tâche | Forme utile | Raison |
|---|---|---|
| Parcourir un intervalle connu | for | Le départ, la borne et le pas sont réunis. |
| Répéter jusqu’à un changement de saisie ou d’état | while | Le test peut empêcher le premier passage. |
| Demander d’abord, puis vérifier | do-while | La première exécution du corps est obligatoire. |
Les formes peuvent exprimer la même répétition, mais les réécritures doivent préserver l’ordre des tests et des mises à jour, y compris ce qu’un continue saute.
Points clés
- Une boucle for exécute l’initialisation une fois, puis le test, le corps et la mise à jour.
- Vérifie le départ, la dernière valeur incluse et le nombre de passages.
- Un compteur déclaré dans l’en-tête n’est plus accessible après la boucle.
- Utilise
forpour les intervalles,whilepour les changements d’état et do-while lorsqu’un premier passage est obligatoire. - Un point-virgule après un en-tête for crée un corps vide.
3.4 Sorties anticipées et passages sautés
Une sortie anticipée peut arrêter la répétition dès que sa tâche est accomplie. Sauter un passage peut éviter un traitement inutile tout en poursuivant la boucle. Suis attentivement leurs destinations : break et continue ont des rôles différents.
Termine une recherche avec break
for (int n = 51; n <= 100; n++) {
if (n % 7 == 0) {
System.out.println(n);
break;
}
}
Les valeurs de 51 à 55 échouent au test de divisibilité. La valeur suivante, 56, est affichée et break quitte immédiatement la boucle. La mise à jour ne s’exécute pas après ce break. Sans lui, les multiples suivants comme 63 et 70 seraient aussi affichés.
Un break sans étiquette cible la boucle ou le switch englobant le plus proche. L’exécution continue après cette construction, pas après l’ensemble du programme.
Saute un passage avec continue
for (int i = 1; i <= 10; i++) {
if (i % 3 == 0) {
continue;
}
System.out.print(i + " ");
}
Pour 3, 6 et 9, continue saute l’instruction d’affichage. Dans une boucle for, la mise à jour de l’en-tête s’exécute tout de même, suivie de la condition. La sortie contient 1, 2, 4, 5, 7, 8 et 10.
Pour une boucle while ou do-while, continue passe à la condition. Toute mise à jour placée en dessous dans le corps est sautée. Si un compteur while commence à 0 et que la première action est if (i % 3 == 0) { continue; }, un i++ placé plus loin dans le corps n’est jamais atteint. Le compteur reste à 0 et la boucle se répète indéfiniment. Déplace la mise à jour nécessaire avant chaque chemin qui saute la suite, ou utilise un en-tête for pour que la mise à jour reste automatique.
Quitte volontairement des boucles imbriquées
Un break ordinaire dans une boucle interne ne termine que cette boucle interne. Une étiquette peut désigner une boucle externe comme cible de sortie :
outer:
for (int a = 1; a <= 10; a++) {
for (int b = 1; b <= 10; b++) {
if (a * b == 24 && a + b == 10) {
System.out.println("Found " + a + " and " + b);
break outer;
}
}
}
La recherche parcourt les paires dans l’ordre. Pour a = 4 et b = 6, les deux tests réussissent et le break étiqueté quitte les deux boucles. continue outer passerait à la mise à jour de la boucle externe, puis à son test suivant.
Distingue les sorties du switch de celles de la boucle
Dans une boucle de menu contenant un switch sous forme avec deux-points, break dans un cas termine le switch. Il ne termine pas à lui seul la boucle qui l’entoure. Un schéma clair consiste à affecter false à un indicateur de boucle dans le cas de sortie, puis à utiliser break pour quitter le switch. La boucle se termine lorsque la vérification suivante de sa condition constate que l’indicateur est faux. Les cas avec flèche n’ont pas besoin de break pour empêcher l’enchaînement des cas.
Un break sans étiquette est autorisé dans une boucle ou un switch ; continue est autorisé dans une boucle. Les placer ailleurs provoque une erreur de compilation. Garde la règle d’arrêt normale dans la condition de la boucle lorsqu’elle peut s’y trouver. Utilise while (true) avec un break lorsque le test d’arrêt se place naturellement après la lecture d’une saisie mais avant son traitement. Plusieurs sorties peuvent être utiles, mais chaque chemin supplémentaire ajoute des états à suivre lors du suivi de l’exécution.
Points clés
breakquitte immédiatement sa cible.- Dans une boucle for,
continueexécute tout de même la mise à jour de l’en-tête. - Dans une boucle while,
continuepeut sauter une mise à jour nécessaire du corps. - Une sortie ordinaire agit sur la construction admissible la plus proche.
- Un break étiqueté peut quitter une boucle externe.
- Un break dans un switch ne quitte pas directement une boucle qui l’entoure.
4Construis et vérifie des boucles utiles
Une boucle devient utile lorsqu’elle ne conserve que les informations nécessaires à un problème : un compteur, une somme cumulée, une meilleure valeur ou un indicateur qui mémorise une correspondance. Combiner ces petits schémas permet de résoudre des tâches de traitement de saisie et de recherche. Les boucles imbriquées étendent la répétition aux lignes et aux colonnes. Suis les changements de valeurs, conserve l’état dans la bonne portée et utilise des saisies vides et des cas limites pour vérifier que le résultat décrit toutes les données.
4.1 Comptages, sommes et moyennes cumulés
Un compteur enregistre le nombre de valeurs qui répondent à une condition. Un accumulateur combine des valeurs dans un résultat cumulé. Déclare les deux avant la boucle pour que chaque passage poursuive le travail précédent.
Initialise selon l’opération
Utilise int count = 0; et incrémente le compteur lorsqu’un élément répond à la condition. Une somme commence à 0 et utilise sum += value;. Un produit commence à 1, car multiplier un 0 initial effacerait l’effet de tous les facteurs suivants. Initialiser une somme dans le corps la remet à zéro à chaque passage.
Pour un intervalle, le pas de la boucle peut sélectionner les valeurs : additionner les entiers pairs de 2 à 100 par pas de 2 donne 2 550. Tu peux aussi placer une condition dans la boucle. Compter les nombres de 1 à 100 divisibles par 3 ou par 5 donne 47 : les six multiples de 15 ne doivent être comptés qu’une seule fois.
Arrête la saisie avant d’ajouter la valeur
Une sentinelle est une valeur de saisie spéciale qui met fin à la lecture. Ce n’est pas une valeur ordinaire des données :
int sum = 0;
int count = 0;
while (true) {
int number = Integer.valueOf(scanner.nextLine());
if (number == 0) {
break;
}
sum += number;
count++;
}
Pour la saisie 12, 7, 5, 0, la somme prend successivement les valeurs 12, 19 et 24. Le compteur atteint 3. Le 0 final déclenche le break avant que l’une ou l’autre variable change. Le compter créerait un quatrième élément et donnerait une moyenne incorrecte, même si l’ajout de zéro ne change pas la somme.
Divise seulement après avoir vérifié le compteur
if (count > 0) {
double average = (double) sum / count;
System.out.println(average);
} else {
System.out.println("No numbers entered");
}
L’exemple affiche 8.0. Avec des opérandes entiers, la division supprime la partie fractionnaire : 25 / 4 vaut 6. Convertis avant de diviser pour obtenir 6,25 : (double) sum / count. Effectuer le transtypage après, (double) (sum / count), ne fait que convertir le résultat déjà tronqué en 6,0.
Si la sentinelle arrive en premier, le compteur vaut 0. Une division entière par zéro lève une ArithmeticException ; une somme en virgule flottante égale à zéro divisée par zéro donne NaN. La vérification du compteur évite qu’une saisie vide produise une moyenne qui n’a pas de sens.
Suis plusieurs résultats en un passage
Pour les scores 55, 72, 90, 48 et 81, avec un seuil de réussite de 60, on obtient cinq scores et trois réussites. Garde un compteur total pour chaque score et un compteur de réussites dans la condition de réussite. 100.0 * passed / total donne 60,0 pour cent ; 100.0 fait utiliser des calculs en virgule flottante. Vérifie aussi que le total est positif avant cette division.
L’endroit où se fait l’affichage change ce qui est montré. Des distances de 5, 3 et 8 km donnent des sommes cumulées de 5, 8 et 16 km lorsqu’elles sont affichées dans la boucle après l’addition. Un affichage après la boucle ne donne que le résultat final, 16 km.
Choisis un type assez grand pour la somme
Le maximum d’un int est 2 147 483 647. La somme de tous les entiers de 1 à 100 000 devrait donner 5 000 050 000, mais un int revient à 705 082 704 sans signaler d’erreur. long sum = 0; contient correctement cette somme ; le maximum d’un long est d’environ 9,2 × 10¹⁸. Une conversion élargissante effectuée après le dépassement de capacité ne peut pas restaurer la valeur perdue.
Points clés
- Initialise une somme ou un compteur à 0 et un produit à 1.
- Exclus la sentinelle de la somme et du comptage.
- Convertis un opérande avant la division pour conserver la partie fractionnaire.
- Protège le calcul des moyennes et des pourcentages contre une saisie vide.
- Place la mise à jour de chaque compteur à côté de la condition qu’il compte.
- Utilise un type assez grand avant de calculer une somme importante.
4.2 Meilleures valeurs, recherches et chiffres
Certaines boucles mémorisent une meilleure valeur ; d’autres mémorisent si une correspondance a été trouvée. Choisis l’état initial pour qu’il reflète la situation réelle avant et après chaque passage.
Garde la meilleure valeur rencontrée jusque-là
Pour suivre un maximum, remplace-le uniquement lorsque la valeur actuelle est plus grande : if (value > max) { max = value; }. En partant de la première mesure, les températures 14, 19, 11, 23 et 17 °C donnent les maximums successifs 14, 19, 19, 23 et 23 °C. Un minimum utilise < à la place.
Initialiser un maximum à 0 échoue avec des données toutes négatives : -5, -2 et -9 laisseraient à tort 0 comme résultat. Initialise-le à partir d’une mesure réelle ou commence à Integer.MIN_VALUE pour un maximum de type int et à Integer.MAX_VALUE pour un minimum de type int. Indique l’absence de résultat lorsqu’il n’y a eu aucune mesure.
Pour enregistrer une position, mets-la à jour dans la même branche que la valeur. Un > strict conserve le premier maximum en cas d’égalité ; >= le remplace à nouveau et conserve le dernier.
Arrête-toi après avoir trouvé une correspondance
int n = 1;
while (n * n <= 500) {
n++;
}
À 22, le carré est 484, donc un autre passage s’exécute. À 23, il est 529 et la condition n’est plus satisfaite. La boucle a trouvé le plus petit entier positif dont le carré dépasse 500. Une recherche bornée peut à la place tester chaque candidat dans une boucle for et s’arrêter avec break à la première correspondance.
Pour une question portant sur au moins une valeur, initialise un indicateur à faux et passe-le à vrai lorsqu’une correspondance est trouvée. Pour une question portant sur toutes les valeurs, initialise-le à vrai et passe-le à faux dès qu’un contre-exemple apparaît. Ne réinitialise aucun de ces indicateurs dans une branche else pour les valeurs suivantes : par exemple, une mesure ultérieure qui ne correspond pas n’efface pas une mesure négative antérieure.
Teste la présence d’un diviseur
Un nombre premier est supérieur ou égal à 2 et ne possède aucun diviseur de 2 jusqu’au nombre qui le précède. Pour un petit entier positif, une vérification plus courte teste les diviseurs seulement jusqu’à sa racine carrée :
int n = 91;
boolean isPrime = n >= 2;
for (int d = 2; d * d <= n; d++) {
if (n % d == 0) {
isPrime = false;
break;
}
}
Les deux facteurs d’une paire ne peuvent pas être tous deux supérieurs à la racine carrée. Pour 91, le diviseur 7 donne un reste nul et fait passer l’indicateur à faux. Pour 97, aucun diviseur de 2 à 9 ne le divise, donc l’indicateur reste vrai. Les valeurs inférieures à 2 commencent avec un indicateur faux. Pour les grands entiers positifs de type int, utilise d <= n / d pour éviter un dépassement de capacité dans d * d.
Retire un chiffre décimal par passage
Pour un entier positif ou nul, % 10 extrait le dernier chiffre et la division entière / 10 le retire :
int n = 4072;
int sum = 0;
while (n > 0) {
sum += n % 10;
n /= 10;
}
Les chiffres sont 2, 7, 0 et 4, ce qui donne 13. La variable de travail n finit à 0. Pour inverser les chiffres, mets à jour reversed = reversed * 10 + n % 10; avant de retirer le chiffre ; 1 234 devient 4 321 lorsque le résultat tient dans le type choisi.
Pour compter les chiffres, zéro nécessite un passage même si n > 0 est faux au départ. Utilise une boucle do-while qui incrémente le compteur et divise n par 10. Elle compte un chiffre pour 0 et le nombre habituel pour les valeurs positives.
Points clés
- Initialise un extremum à partir de données réelles ou d’une limite adaptée du type.
- Mets à jour la position d’un extremum en même temps que sa valeur.
- Garde un indicateur de recherche vrai après une correspondance pour « au moins une », ou faux après un contre-exemple pour « toutes ».
- Un test de primalité n’a pas besoin de diviseurs supérieurs à la racine carrée.
- Pour les entiers positifs ou nuls,
% 10extrait un chiffre et/ 10le retire. - Compter les chiffres de zéro nécessite un premier passage obligatoire.
4.3 Boucles imbriquées, suivi d’exécution et cas de test
Les boucles imbriquées répètent une répétition complète à chaque passage externe. Elles sont utiles pour les lignes, les colonnes, les tableaux et les formes. La boucle interne doit repartir de zéro chaque fois que la boucle externe l’atteint.
Affiche une ligne, puis termine-la
for (int row = 1; row <= 3; row++) {
for (int col = 1; col <= 5; col++) {
System.out.print(row * col + "\t");
}
System.out.println();
}
La première ligne contient 1, 2, 3, 4, 5 ; la deuxième contient 2, 4, 6, 8, 10 ; la troisième contient 3, 6, 9, 12, 15. Le print interne crée des colonnes sur une ligne ; le println après la boucle interne termine cette ligne. Déplacer println dans la boucle interne place chaque produit sur sa propre ligne.
Lorsque les nombres de passages sont fixes, multiplie les passages externes par les passages internes. Trois passages externes et quatre passages internes exécutent le corps interne 12 fois. Le tableau ci-dessus comporte trois fois cinq affichages de produits, soit 15.
Fais varier la taille des lignes
for (int row = 1; row <= 4; row++) {
for (int col = 1; col <= row; col++) {
System.out.print("*");
}
System.out.println();
}
La borne interne dépend maintenant de la ligne. Les nombres de passages sont 1, 2, 3 et 4, donc le triangle contient 10 étoiles. Une seule multiplication de nombres de passages fixes serait incorrecte, car la boucle interne ne s’exécute pas autant de fois sur chaque ligne.
Utilise des noms différents pour les compteurs de boucles dont les portées se chevauchent. Déclarer un autre int i dans une boucle où i est déjà accessible provoque une erreur de compilation. Pour une boucle while interne, initialise son compteur au début de chaque passage externe. L’initialiser uniquement avant la boucle externe le laisse au-delà de la borne après la première ligne.
Suis les valeurs au même moment
Pour une boucle de 1 à 4, soustrais les valeurs impaires d’une somme initialisée à 0 et ajoute les valeurs paires :
| Valeur traitée | Action | Somme après le passage |
|---|---|---|
| 1 | Soustraire 1 | -1 |
| 2 | Ajouter 2 | 1 |
| 3 | Soustraire 3 | -2 |
| 4 | Ajouter 4 | 2 |
Indique si une ligne décrit le début ou la fin d’un passage. Inclus le test final qui échoue lorsque tu vérifies la fin de la boucle. Un suivi qui mélange des valeurs avant et après mise à jour peut faire paraître incorrecte une boucle correcte.
Place des séparateurs entre les éléments
Cinq nombres nécessitent quatre virgules. Affiche un séparateur avant chaque élément sauf le premier :
for (int i = 1; i <= 5; i++) {
if (i > 1) {
System.out.print(", ");
}
System.out.print(i);
}
La sortie est « 1, 2, 3, 4, 5 », sans virgule au début ni à la fin. C’est un problème des piquets : le nombre d’espaces entre les éléments diffère du nombre d’éléments.
Teste des cas qui révèlent les erreurs
Essaie zéro passage, un passage et les valeurs situées sur chaque borne et juste à côté. Pour les boucles de saisie, essaie d’abord la sentinelle. Pour les boucles imbriquées, vérifie si la deuxième ligne est correctement réinitialisée. Des affichages temporaires des variables de boucle révèlent la progression réelle. Si un programme reste bloqué, examine chaque chemin à la recherche d’une mise à jour ou d’une sortie et arrête-le avec Ctrl+C dans un terminal ou avec le bouton d’arrêt de l’environnement de développement.
Points clés
- La boucle interne s’exécute entièrement à chaque passage externe.
- Multiplie les nombres de passages uniquement lorsqu’ils sont tous deux fixes.
- Réinitialise le compteur d’une boucle while interne à chaque passage externe.
- Place le saut de ligne d’une ligne après sa boucle interne.
- Pour les lignes du tableau de suivi d’exécution, utilise le même moment à chaque passage.
- Teste zéro passage, un passage et les deux côtés d’une borne.
- Les séparateurs se placent entre les éléments : ils sont donc un de moins.
Conditions et boucles en Java : exemples
1Transforme une règle du programme en condition
12 étapes
- 1IntroductionPars d’une règle sur les données
Une condition répond par vrai ou faux à une question sur les données actuelles. Commence par des comparaisons simples, puis combine-les en une règle qui accepte exactement les valeurs voulues.
Nous allons vérifier un intervalle de température, comparer du texte et protéger une division entière. À chaque étape, distingue le sens de la condition de l’ordre dans lequel Java l’évalue.
- 2ExplicationDonne un nom à une comparaison
Une comparaison produit un
boolean, qui peut être stocké pour une utilisation ultérieure.int age = 17; boolean isAdult = age >= 18;Ici,
isAdultstockefalse. L’expressionif (isAdult)teste ensuite directement cette valeur. Un entier seul ne peut pas servir de condition :if (age)échoue, car Java exige un booléen, et non un nombre utilisé comme valeur de vérité. - 3ExempleLis précisément l’opérateur
Avec
a = 7etb = 10,a < best vrai eta >= best faux. Les comparaisonsa != beta == 7sont vraies.La différence entre
=et==compte : l’affectation modifie une variable, tandis que la comparaison pose une question. Pour un booléen,if (done = true)compile mais écrase l’indicateur avant de le tester. Utiliseif (done)pour tester la valeur existante. - 4ConseilCompare les caractères de la saisie
Une chaîne non nulle comme
commandpossède un contenu textuel et une identité d’objet.command.equals("quit")teste les caractères ;command == "quit"teste l’identité.Utilise
equalsIgnoreCaseuniquement lorsque les différences de casse doivent être acceptées. Par exemple, « Quit » et « quit » correspondent avec cette méthode mais diffèrent avecequals. Nier une correspondance exacte donne!command.equals("quit"). - 5ExempleVérifie une différence entre décimaux
double sum = 0.1 + 0.2; boolean close = Math.abs(sum - 0.3) < 1e-9;La somme est stockée sous la forme
0.30000000000000004. L’égalité exacte avec0.3est fausse, mais la différence absolue est inférieure à cette tolérance, ce qui rendclosevrai. Le test de tolérance accepte une petite différence ; il ne change aucune des deux valeurs stockées et ne les rend pas exactement égales. - 6DéfiTeste un nombre impair négatif
Un programme utilise
n % 2 == 1pour détecter les entiers impairs. Que manque-t-il lorsquenvaut -11 et comment peut-on corriger le test ?---reveal---
-11 % 2vaut-1, donc le test est faux même si -11 est impair. Utilisen % 2 != 0: la divisibilité par 2 donne un reste nul, et les restes non nuls, positifs ou négatifs, indiquent des entiers impairs. - 7ExplicationExige les deux bornes
Pour accepter les températures de 18 à 24 °C inclus, exige les deux comparaisons :
temp >= 18 && temp <= 24.Avec 21, les deux sont vraies. Avec 17, la première est fausse ; avec 25, la seconde est fausse. Utiliser
||entre ces bornes de l’intervalle accepterait les trois valeurs, car chacune satisfait au moins l’un des deux tests. Chaque opérande doit être une expression booléenne complète. - 8Point cléInverse tout l’intervalle
Être en dehors du même intervalle signifie
temp < 18 || temp > 24. Une seule borne non respectée suffit pour être à l’extérieur.C’est une loi de De Morgan en action :
!(p && q)équivaut à!p || !q. Nier les deux parties change aussi l’opérateur qui les relie. L’autre loi est!(p || q)équivalent à!p && !q; conserver l’ancien opérateur changerait les saisies acceptées. - 9ExemplePlace une condition de garde avant la division
int total = 36; int count = 0; boolean large = count != 0 && total / count > 10;La première comparaison, qui est fausse, détermine le résultat, donc
&&saute la division. C’est l’évaluation en court-circuit. Inverser les opérandes diviserait par zéro avant de vérifier count et lèverait uneArithmeticException. Avec||, un opérande gauche vrai fait de même sauter l’opérande droit. - 10DéfiDistingue le regroupement de l’ordre de lecture
Avec
a = true,b = falseetc = false,a || b && cet(a || b) && cdonnent-ils le même résultat ? Explique le regroupement.---reveal---
Non. La première expression se regroupe sous la forme
a || (b && c)parce que&&est prioritaire, donc elle est vraie. La seconde exige le résultat dea || bainsi quec; puisquecest faux, son résultat est faux. - 11DéfiCombine une borne et une exception
Une charge est acceptée si elle est comprise entre 6 et 14 kg inclus ou si une dérogation est active, mais un calcul entier
100 / count > 5doit aussi réussir sans erreur. Écris la condition de sorte que count égal à 0 ne puisse pas atteindre la division.---reveal---
count != 0 && (load >= 6 && load <= 14 || override) && 100 / count > 5La première condition de garde rejette zéro. Le choix entre parenthèses accepte l’intervalle ou la dérogation ; seul un chemin qui n’a pas été rejeté atteint la division.
- 12RécapitulatifVérifie une condition des deux côtés
Avant d’utiliser une condition, essaie une saisie qui devrait être acceptée et une autre qui devrait être rejetée. Pour les intervalles, vérifie aussi les bornes.
Lis les parenthèses et les priorités pour déterminer le regroupement, puis suis l’évaluation en court-circuit de gauche à droite. Cela permet de repérer à la fois une règle d’acceptation incorrecte et un calcul qui s’exécute avant sa condition de garde.
2Choisis un chemin et produis un résultat
14 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionSuis le chemin que Java atteint
- 2ExempleExécute exactement une branche
- 3ExplicationGarde le résultat après la décision
- 4DéfiRepère un affichage inconditionnel
- 5ConseilRends le choix interne explicite
- 6ExempleParcours les seuils dans le bon ordre
- 7LienSépare les actions indépendantes
- 8DéfiCorrige une borne oubliée
- 9ExplicationChoisis selon une valeur exacte
- 10ExempleAffecte la valeur choisie
- 11ExplicationDonne sa valeur à un bloc
- 12DéfiSuis l’enchaînement des cas avec deux-points
- 13DéfiChoisis une structure pour une règle mixte
- 14RécapitulatifExamine les limites des décisions
3Suis une boucle de son premier passage jusqu’à sa sortie
18 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionObserve les changements d’état
- 2ExplicationTeste avant d’entrer
- 3ExempleSuis l’évolution d’un produit
- 4DéfiÉvite de sauter la valeur d’arrêt
- 5ExplicationExécute une fois avant de décider
- 6ExempleLis une note avant de la tester
- 7DéfiPrévois l’acceptation d’une borne
- 8LienPlace le comptage dans l’en-tête
- 9ExempleCompte avec des pas supérieurs à un
- 10DéfiGarde la borne voulue
- 11ConseilVérifie si le corps est vide
- 12ExempleArrête-toi à la première correspondance
- 13ExplicationSaute le reste d’un passage
- 14DéfiTrouve la mise à jour sautée
- 15ExplicationDonne un nom de sortie à une boucle externe
- 16LienDistingue les sorties du switch et de la boucle
- 17DéfiCombine un passage sauté et une sortie anticipée
- 18RécapitulatifSuis la destination suivante
4Construis des résultats qui décrivent toutes les données traitées
19 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionDétermine ce qui doit être conservé d’un passage à l’autre
- 2ExplicationDistingue un comptage d’une somme
- 3ExempleLis et rejette la sentinelle
- 4ExempleSuis l’état pendant la saisie
- 5ExplicationConserve la partie fractionnaire de la moyenne
- 6DéfiCalcule la moyenne des seules mesures acceptées
- 7ConseilUtilise assez tôt un type de capacité suffisante
- 8ExempleGarde la meilleure mesure
- 9DéfiEnregistre la position en cas d’égalité
- 10Point cléLaisse un indicateur mémoriser une correspondance
- 11ExplicationRecherche un diviseur
- 12ExempleExtrais les chiffres dans un ordre fixe
- 13DéfiGarde en mémoire une mesure négative
- 14ExplicationTermine chaque ligne avant d’avancer
- 15ExempleCompte des lignes de taille variable
- 16DéfiCorrige le séparateur au premier élément
- 17ConseilChoisis des lignes de suivi révélatrices
- 18DéfiCombine une borne variable et une sélection
- 19RécapitulatifVérifie le sens de chaque résultat
Conditions et boucles en Java : QCM
Série 1 : Trouve des erreurs et prévois des comportements combinés10 Questions Pratiques
Question 1 sur 10
!(false || true) ?Afficher la réponseMasquer la réponse
Question 2 sur 10
Qu’est-ce qui s’affiche ?
int a = -2;
int b = 5;
if (a > 0)
if (b > 0)
System.out.print("both");
else
System.out.print("one");
System.out.print("end");
Afficher la réponseMasquer la réponse
Question 3 sur 10
Quelle valeur est affectée ?
int level = 3;
int result = switch (level) {
case 1, 2 -> 4;
case 3 -> {
int base = level * 2;
yield base + 1;
}
default -> 0;
};
Afficher la réponseMasquer la réponse
Question 4 sur 10
Quelle est la valeur finale de count ?
int count = 0;
outer:
for (int row = 1; row <= 3; row++) {
for (int col = 1; col <= 3; col++) {
if (row == col) {
continue outer;
}
count++;
}
}
Afficher la réponseMasquer la réponse
Question 5 sur 10
n = 143, une boucle de test de primalité commence au diviseur 2 et continue tant que d * d <= n, en utilisant break lorsque le reste est nul. À quel diviseur s’arrête-t-elle pour la première fois ?Afficher la réponseMasquer la réponse
Question 6 sur 10
Que vaut count à la fin ?
int count = 0;
int col = 1;
for (int row = 1; row <= 3; row++) {
while (col <= row) {
count++;
col++;
}
}
Afficher la réponseMasquer la réponse
Question 7 sur 10
(double) sum / count et quelle correction faut-il apporter ?Afficher la réponseMasquer la réponse
Question 8 sur 10
Quel nombre de chiffres cela produit-il pour n = 0 ?
int n = 0;
int digits = 0;
do {
digits++;
n /= 10;
} while (n > 0);
Afficher la réponseMasquer la réponse
Question 9 sur 10
score < 0 || score > 40, puis attribue « high » à score >= 30, « middle » à score >= 18 et « low » au reste. Quelles catégories les scores 40, 41 et 18 reçoivent-ils, dans cet ordre ?Afficher la réponseMasquer la réponse
Question 10 sur 10
Afficher la réponseMasquer la réponse
Série 2 : Lis des conditions et choisis un chemin10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
-13 % 2 != 0 ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
String command non nulle contient un texte lu en entrée. Quelle expression vérifie que son contenu est exactement « pause » ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Qu’affiche ce code ?
boolean ready = true;
boolean locked = false;
boolean expired = false;
System.out.println(ready || locked && expired);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Qu’affiche ce code ?
int stock = 0;
if (stock > 0) {
System.out.print("available ");
} else {
System.out.print("empty ");
}
System.out.print("checked");
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Qu’est-ce qui s’affiche ?
int load = 74;
if (load >= 50) {
System.out.print("medium");
} else if (load >= 70) {
System.out.print("high");
} else {
System.out.print("low");
}
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Quelle valeur est stockée dans mode ?
String command = "RUN";
int mode = switch (command) {
case "run" -> 1;
case "wait" -> 2;
default -> 3;
};
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
int sum = 15; et int count = 0;, que se passe-t-il lors de l’évaluation de count == 0 || sum / count > 4 ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Pourquoi ce code ne compile-t-il pas ?
int value = 8;
String label;
if (value > 5) {
label = "large";
}
System.out.println(label);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
member && !blocked || guest && codeValid est vrai. Quelle condition rejette exactement les entrées qu’il autoriserait ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 3 : Suis les tests, les mises à jour et les sorties des boucles10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Combien de fois le corps s’exécute-t-il ?
int n = 12;
while (n < 8) {
n++;
}
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
Qu’est-ce qui s’affiche ?
int level = 9;
do {
level -= 2;
} while (level > 8);
System.out.println(level);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
Combien de fois le corps s’exécute-t-il ?
for (int k = 2; k <= 17; k += 4) {
System.out.println(k);
}
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Qu’est-ce qui s’affiche, sans tenir compte de l’espace final ?
for (int k = 2; k <= 7; k++) {
if (k % 2 == 0) {
continue;
}
System.out.print(k + " ");
}
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Que valent amount et steps après cette boucle ?
int amount = 3;
int steps = 0;
while (amount < 40) {
amount *= 2;
steps++;
}
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Quelle est la valeur finale de total ?
int total = 0;
for (int k = 1; k <= 8; k++) {
if (k % 3 == 0) {
continue;
}
total += k;
if (total > 12) {
break;
}
}
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
int index. Où le code peut-il lire cette variable ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Qu’est-ce qui s’affiche ?
int hits = 0;
outer:
for (int row = 1; row <= 4; row++) {
for (int col = 1; col <= 4; col++) {
if (row + col == 5) {
break outer;
}
hits++;
}
}
System.out.println(hits);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Pourquoi cette boucle ne se termine-t-elle jamais ?
int n = 1;
while (n != 12) {
n += 2;
}
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 4 : Calcule des résultats à partir de saisies répétées10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
int sum = 17; et int count = 4;, quelle est la valeur de (double) (sum / count) ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
max à 0 peut-il donner une réponse incorrecte ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Qu’est-ce qui s’affiche ?
int n = 6205;
int sum = 0;
while (n > 0) {
sum += n % 10;
n /= 10;
}
System.out.println(sum);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Combien d’étoiles sont affichées au total ?
for (int row = 2; row <= 5; row++) {
for (int col = 1; col < row; col++) {
if (col == 2) {
continue;
}
System.out.print("*");
}
}
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Que valent best et position ensuite ?
int best = Integer.MIN_VALUE;
int position = 0;
for (int day = 1; day <= 5; day++) {
int value = day % 3 - 4;
if (value >= best) {
best = value;
position = day;
}
}
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Quelle est la sortie ?
for (int k = 3; k <= 5; k++) {
if (k > 3) {
System.out.print(", ");
}
System.out.print(k);
}
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Qu’affiche ce code ?
boolean allPositive = true;
for (int k = 1; k <= 4; k++) {
int value = k - 2;
if (value <= 0) {
allPositive = false;
} else {
allPositive = true;
}
}
System.out.println(allPositive);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 5 : Combine des décisions avec des schémas de boucle10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
Qu’est-ce qui s’affiche ?
int result = 0;
switch (2) {
case 1:
result += 2;
case 2:
result += 3;
case 3:
result += 5;
break;
default:
result = -1;
}
System.out.println(result);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
Que vaut total après la boucle ?
int total = 0;
for (int k = 1; k <= 5; k++) {
switch (k % 3) {
case 0:
break;
default:
total += k;
}
total++;
}
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Quelle est la valeur finale de total ?
int total = 0;
for (int n = 1; n <= 9; n++) {
if (n % 2 == 0) {
total += 2;
} else if (n % 3 == 0) {
total += 3;
} else {
total--;
}
}
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
do { ... } while (value < 10 || value > 14);. Combien de saisies lit-elle ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Qu’est-ce qui s’affiche ?
int n = 58;
int result = 0;
do {
int digit = n % 10;
if (digit % 2 == 0) {
result = result * 10 + digit;
}
n /= 10;
} while (n > 0);
System.out.println(result);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
Math.abs((0.1 + 0.2) - 0.3) < 1e-9 peut-il être vrai alors que (0.1 + 0.2) == 0.3 est faux ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
(double) sum / count. Quel est le résultat et quelle correction faut-il apporter ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Qu’affiche ce code ?
for (int n = 4; n > 0; n--);
{
System.out.print("done");
}
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Tu bloques sur ton propre exercice ? Aide aux Devoirs
Mots-Clés
A
Accumulateur
B
Bloc
Boucle à test final
Boucle do-while
Boucle externe
Boucle for
Boucle imbriquée
Boucle infinie
i <= 5 est testé produit une boucle infinie, sauf si un autre chemin permet de sortir.Boucle interne
Boucle while
Branche
break
C
Cas limite
Compteur
Condition de poursuite
continue
Contre-exemple
D
Dépassement de capacité
Division entière
17 / 4, ce qui explique pourquoi un calcul de moyenne convertit d’abord un opérande.E
Else pendant
Enchaînement de else if
Enchaînement des cas
Erreur de décalage d’une unité
< 12 mais doit inclure 12.ET logique
&&.Exhaustivité
Expression switch
Extraction de chiffres
% 10, afin de l’utiliser avant qu’une division ne le retire.É
Étiquette de cas
Évaluation en court-circuit
&& ou de || lorsque l’opérande gauche détermine déjà le résultat complet.count != 0 && sum / count > 5 sans erreur lorsque les deux variables sont des int.I
Indicateur booléen
Initialisation
Instruction break étiquetée
Instruction continue étiquetée
Itération
L
Lois de De Morgan
M
Maximum
Minimum
Mise à jour
i += 4 fait passer le compteur de 2 à 6 après la fin du premier corps de boucle for.N
Négation
! : elle transforme vrai en faux et faux en vrai sans modifier les données sous-jacentes.!command.equals("stop") est vraie tant que le texte saisi diffère de « stop ».Nombre premier
O
Opérateur conditionnel
?: sélectionne l’une de deux valeurs d’expression selon une condition booléenne, ce qui permet un choix court entre deux valeurs.label selon un test de reste.Opérateur d’affectation
= stocke une valeur dans une variable ; l’expression obtenue a pour valeur cette valeur affectée, et non un résultat de comparaison.if (done = true) modifie l’indicateur avant l’exécution de la branche.Opérateur d’égalité
== compare des valeurs primitives, mais, pour des références d’objets comme les chaînes, il teste si les objets sont identiques.3 == 3.0 parce qu’une conversion numérique rend leurs valeurs égales.Opérateur de comparaison
<= inclut dans un intervalle autorisé un score égal à la borne supérieure.OU exclusif
^.OU logique
||.P
Portée
Priorité des opérateurs
a || b && c signifie a || (b && c), même si ou apparaît en premier.Problème des piquets
R
Recherche
Reste
% après une division entière ; un reste nul indique que la valeur est divisible par le diviseur.-13 % 2 est -1 : tester si le reste est non nul permet donc de reconnaître cet entier impair.S
Sélecteur
command dirige le texte « wait » vers un cas portant cette étiquette de chaîne exacte.Sentinelle
Seuil
score >= 30 inclut 30, tandis que score > 30 exclut ce score exact.Somme cumulée
Sortie anticipée
T
Tableau de suivi d’exécution
Test aux limites
Tolérance
1e-9 accepte la très petite différence entre 0.1 + 0.2 et 0.3 dans ce calcul.V
Valeur booléenne
true, soit false ; les comparaisons en produisent et les conditions Java exigent une expression de ce type.isFull devient vraie lorsqu’un conteneur atteint sa capacité.Validation des entrées
Variable de boucle
Y
yield
- 1Premiers programmes Java
- 2Conditions et boucles en Java
- 3Méthodes Java
- 4Listes et tableaux en Java
- 5Classes et objets en Java
- 6Références et égalité en Java
- 7HashMap et collections en Java
- 8Héritage et polymorphisme en Java
- 9Exceptions et fichiers en Java
- 10Paquetages et tests unitaires Java
- 11Généricité et flux en Java
À propos de cette unité
Crée ton propre Matériel d'Étude
Transforme tes notes, diapos et documents en Guides d'Étude, Questions Pratiques, Flashcards et 6 autres outils.