Apprenez À Créer Des Boucles - Apprenez À Programmer en Java - OpenClassrooms

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 1

Parcours Cours Alternance Employeurs

Accueil > Cours > Apprenez à programmer en Java > Apprenez à créer des boucles

Apprenez à programmer en Java

40 heures  Dif cile Licence



Mis à jour le 05/07/2019

 

Bien
Apprenez à créer des boucles  commencer en 
Java
Le rôle des boucles est de répéter un certain nombre de fois les mêmes opérations. Tous
1. Installez les outils
les programmes, ou presque, ont besoin de ce type de fonctionnalité. Nous utiliserons les
de développement
boucles pour permettre à un programme de recommencer depuis le début, pour
2. Créez des variables
attendre une action précise de l'utilisateur, parcourir une série de données, etc.
et des opérateurs

Une boucle s'exécute tant qu'une condition est remplie. Nous réutiliserons donc des 3. Apprenez à lire les
notions du chapitre précédent ! entrées clavier

4. Dé nissez des
La boucle while


conditions

Pour décortiquer précisément ce qui se passe dans une boucle, nous allons voir comment 5. Apprenez à créer
des boucles
elle se construit ! Une boucle commence par une déclaration : ici while . Cela veut dire, à
6. TP : Convertissez
peu de chose près, « tant que ». Puis nous avons une condition : c'est elle qui permet à la
des Celsius en
boucle de s'arrêter. Une boucle n'est utile que lorsque nous pouvons la contrôler, et donc
Fahrenheit
lui faire répéter une instruction un certain nombre de fois. C'est à ça que servent les
7. Créez des tableaux
conditions. Ensuite nous avons une ou plusieurs instructions : c'est ce que va répéter
notre boucle (il peut même y avoir des boucles dans une boucle ! 8. Écrivez des
méthodes de classe
java

1 while (/* Condition */)  Quiz : Comprenez


2 {
les bases en Java
3 //Instructions à répéter
4 }

ACCÉDER AU
Nous allons travailler sur un exemple concret mais d'abord, ré échissons à « comment FORUM
notre boucle va travailler ». Pour cela, il faut déterminer notre exemple.

Créé par
Nous allons af cher « Bonjour, <un prénom> », prénom qu'il faudra taper au clavier ; puis
nous demanderons si l'on veut recommencer. Pour cela, il nous faut une variable qui va
recevoir le prénom, donc dont le type sera String , ainsi qu'une variable pour récupérer la
réponse. Et là, plusieurs choix s'offrent à nous : soit un caractère, soit une chaîne de
caractères, soit un entier. Ici, nous prendrons une variable de type char . C'est parti !
java OpenClassrooms, Leading

1 //Une variable vide E-Learning Platform in Europe


2 String prenom;
3 //On initialise celle-ci à O pour oui
4 char reponse = 'O';
5 //Notre objet Scanner, n'oubliez pas l'import de java.util.Scanner !
Avec le soutien de
6 Scanner sc = new Scanner(System.in);
7 //Tant que la réponse donnée est égale à oui…
8 while (reponse == 'O')
9 {
10 //On affiche une instruction
11 System.out.println("Donnez un prénom : "); Vous souhaitez aller plus loin ?
12 //On récupère le prénom saisi
Découvrez les formations
13 prenom = sc.nextLine();
14 //On affiche notre phrase avec le prénom proposées par l’ESGI
15 System.out.println("Bonjour " +prenom+ ", comment vas-tu ?");
16 //On demande si la personne veut faire un autre essai
17 System.out.println("Voulez-vous réessayer ? (O/N)");
18
19
//On récupère la réponse de l'utilisateur
reponse = sc.nextLine().charAt(0);
  
20 }
21
22 System.out.println("Au revoir…");
23 //Fin de la boucle

Vous avez dû cligner des yeux en lisant reponse = sc.nextLine().charAt(0); . Rappelez-


vous comment on récupère un char avec l'objet Scanner : nous devons récupérer un
objet String et ensuite prendre le premier caractère de celui-ci ! Eh bien cette syntaxe est
une contraction de ce que je vous avais fait voir auparavant.

Détaillons un peu ce qu'il se passe. Dans un premier temps, nous avons déclaré et
initialisé nos variables. Ensuite, la boucle évalue la condition qui nous dit : tant que la
variable reponse contient « O », on exécute la boucle. Celle-ci contient bien le caractère «
O », donc nous entrons dans la boucle. Puis l'exécution des instructions suivant l'ordre
dans lequel elles apparaissent dans la boucle a lieu. À la n, c'est-à-dire à l'accolade
fermante de la boucle, le compilateur nous ramène au début de la boucle.

Cette boucle n'est exécutée que lorsque la condition est remplie : ici, nous avons
initialisé la variable reponse à « O » pour que la boucle s'exécute. Si nous ne l'avions
pas fait, nous n'y serions jamais entrés. Normal, puisque nous testons la condition
avant d'entrer dans la boucle !

Voilà. C'est pas mal, mais il faudrait forcer l'utilisateur à ne taper que « O » ou « N ».
Comment faire ? C'est très simple : avec une boucle ! Il suf t de forcer l'utilisateur à entrer
soit « N » soit « O » avec un while ! Attention, il nous faudra réinitialiser la variable reponse
à « ' ' » (caractère vide). Il faudra donc répéter la phase « Voulez-vous réessayer ? » tant
que la réponse donnée n'est pas « O » ou « N ».

Voici notre programme dans son intégralité :


java

1 String prenom;
2 char reponse = 'O';
3 Scanner sc = new Scanner(System.in);
4 while (reponse == 'O')
5 {
6 System.out.println("Donnez un prénom : ");
7 prenom = sc.nextLine();
8 System.out.println("Bonjour " +prenom+ ", comment vas-tu ?");
9 //Sans ça, nous n'entrerions pas dans la deuxième boucle
10 reponse = ' ';
11
12 //Tant que la réponse n'est pas O ou N, on repose la question
13 while(reponse != 'O' && reponse != 'N')
14 {
15 //On demande si la personne veut faire un autre essai
16 System.out.println("Voulez-vous réessayer ? (O/N)");
17 reponse = sc.nextLine().charAt(0);
18 }
19 }
20 System.out.println("Au revoir…");

Vous pouvez tester ce code (c'est d'ailleurs vivement conseillé) : vous verrez que si vous
n'entrez pas la bonne lettre, le programme vous posera sans cesse sa question, comme à
la gure suivante !

Les instructions dans la boucle se répètent

Attention à écrire correctement vos conditions et à bien véri er vos variables dans vos
while , et dans toutes vos boucles en général. Sinon c'est le drame ! Essayez d'exécuter le
programme précédent sans la réinitialisation de la variable reponse , et vous verrez le
résultat ! On n'entre jamais dans la deuxième boucle, car reponse = 'O' (puisque
initialisée ainsi au début du programme). Là, vous ne pourrez jamais changer sa valeur…
Le programme ne s'arrêtera donc jamais ! On appelle ça une « boucle in nie ». En voici un
autre exemple.
java

1 int a = 1, b = 15;
2 while (a < b)
3 {
4 System.out.println("coucou " +a+ " fois !!");
5 }

Si vous lancez ce programme, vous allez voir une quantité astronomique de «


coucou 1 fois !! ». Nous aurions dû ajouter une instruction dans le bloc d'instructions de
notre while pour changer la valeur de a à chaque tour de boucle, comme ceci :
java

1 int a = 1, b = 15;
2 while (a < b)
3 {
4 System.out.println("coucou " +a+ " fois !!");
5 a++;
6 }

Ce qui nous donnerait comme résultat la gure suivante.

Correction de la boucle in nie

Une petite astuce : lorsque vous n'avez qu'une instruction dans votre boucle, vous
pouvez enlever les accolades, car elles deviennent super ues, tout comme pour les
instructions if , else if ou else .

Vous auriez aussi pu utiliser cette syntaxe :


java

1 int a = 1, b = 15;
2 while (a++ < b)
3 System.out.println("coucou " +a+ " fois !!");

Souvenez-vous de ce dont je vous parlais au chapitre précédent sur la priorité des


opérateurs. Ici, l'opérateur « < » a la priorité sur l'opérateur d'incrémentation « ++ ». Pour
faire court, la boucle while teste la condition et ensuite incrémente la variable a . Par
contre, essayez ce code :
java

1 int a = 1, b = 15;
2 while (++a < b)
3 System.out.println("coucou " +a+ " fois !!");

Vous devez remarquer qu'il y a un tour de boucle en moins ! Eh bien avec cette syntaxe,
l'opérateur d'incrémentation est prioritaire sur l'opérateur d'inégalité (ou d'égalité), c'est-
à-dire que la boucle incrémente la variable a , et ce n'est qu'après l'avoir fait qu'elle teste
la condition !

La boucle do… while


Puisque je viens de vous expliquer comment fonctionne une boucle while , je ne vais pas
vraiment m'attarder sur la boucle do… while . En effet, ces deux boucles ne sont pas
cousines, mais plutôt sœurs. Leur fonctionnement est identique à deux détails près.
java

1 do{
2 //Instructions
3 }while(a < b);

Première différence

La boucle do… while s'exécutera au moins une fois, contrairement à sa sœur. C'est-à-dire
que la phase de test de la condition se fait à la n, car la condition se met après le while .

Deuxième différence

C'est une différence de syntaxe, qui se situe après la condition du while . Vous voyez la
différence ? Oui ? Non ? Il y a un « ; » après le while . C'est tout ! Ne l'oubliez cependant
pas, sinon le programme ne compilera pas.

Mis à part ces deux éléments, ces boucles fonctionnent exactement de la même manière.
D'ailleurs, refaisons notre programme précédent avec une boucle do… while .
java

1 String prenom = new String();


2 //Pas besoin d'initialiser : on entre au moins une fois dans la boucle !
3 char reponse = ' ';
4
5 Scanner sc = new Scanner(System.in);
6
7 do{
8 System.out.println("Donnez un prénom : ");
9 prenom = sc.nextLine();
10 System.out.println("Bonjour " +prenom+ ", comment vas-tu ?");
11
12 do{
13 System.out.println("Voulez-vous réessayer ? (O/N)");
14 reponse = sc.nextLine().charAt(0);
15 }while(reponse != 'O' && reponse != 'N');
16
17 }while (reponse == 'O');
18
19 System.out.println("Au revoir…");

Vous voyez donc que ce code ressemble beaucoup à celui utilisé avec la boucle while ,
mais il comporte une petite subtilité : ici, plus besoin de réinitialiser la variable reponse ,
puisque de toute manière, la boucle s'exécutera au moins une fois !

La boucle for

Cette boucle est un peu particulière puisqu'elle prend tous ses attributs dans sa condition
et agit en conséquence. Je m'explique : jusqu'ici, nous avions fait des boucles avec :

déclaration d'une variable avant la boucle ;


initialisation de cette variable ;
incrémentation de celle-ci dans la boucle.

Eh bien on met tout ça dans la condition de la boucle for , et c'est tout. Il existe une autre
syntaxe pour la boucle for depuis le JDK 1.5. Nous la verrons lorsque nous aborderons les
tableaux. Mais je sais bien qu'un long discours ne vaut pas un exemple, alors voici une
boucle for sous vos yeux ébahis :
java

1 for(int i = 1; i <= 10; i++)


2 {
3 System.out.println("Voici la ligne "+i);
4 }

Ce qui donne la gure suivante.

Test de boucle for

Vous aurez sûrement remarqué la présence des « ; » dans la condition pour la séparation
des champs. Ne les oubliez surtout pas, sinon le programme ne compilera pas.

Nous pouvons aussi inverser le sens de la boucle, c'est-à-dire qu'au lieu de partir de 0 pour
aller à 10, nous allons commencer à 10 pour atteindre 0 :
java

1 for(int i = 10; i >= 0; i--)


2 System.out.println("Il reste "+i+" ligne(s) à écrire");

On obtient la gure suivante.

Boucle for avec décrémentation

Pour simpli er, la boucle for est un peu le condensé d'une boucle while dont le nombre
de tours se détermine via un incrément. Nous avons un nombre de départ, une condition
qui doit être remplie pour exécuter une nouvelle fois la boucle et une instruction de n de
boucle qui incrémente notre nombre de départ. Remarquez que rien ne nous empêche
de cumuler les déclarations, les conditions et les instructions de n de boucle :
java

1 for(int i = 0, j = 2; (i < 10 && j < 6); i++, j+=2){


2 System.out.println("i = " + i + ", j = " + j);
3 }

Ici, cette boucle n'effectuera que deux tours puisque la condition (i < 10 && j < 6) est
remplie dès le deuxième tour, la variable j commençant à 2 et étant incrémentée de
deux à chaque tour de boucle.

Les boucles vous permettent simplement d'effectuer des tâches répétitives.


Il existe plusieurs sortes de boucles :
la boucle while(condition){…} évalue la condition puis exécute éventuellement
un tour de boucle (ou plus) ;
la boucle do{…}while(condition); fonctionne exactement comme la
précédente, mais effectue un tour de boucle quoi qu'il arrive ;
la boucle for permet d'initialiser un compteur, une condition et un incrément
dans sa déclaration a n de répéter un morceau de code un nombre limité de
fois.
Tout comme les conditions, si une boucle contient plus d'une ligne de code à
exécuter, vous devez l'entourer d'accolades a n de bien en délimiter le début et la
n.

 J'AI TERMINÉ CE CHAPITRE ET JE PASSE AU SUIVANT

TP : CONVERTISSEZ DES CELSIUS EN


 DÉFINISSEZ DES CONDITIONS 
FAHRENHEIT

Le professeur Découvrez aussi ce cours en...


Cyrille Herby
Spécialiste en développement Java et curieux insatiable  
d’informatique et de programmation web. Actuellement
Livre PDF
auditeur en sécurité.

OpenClassrooms Entreprises En plus Français


 

L'entreprise Employeurs Devenez mentor

Alternance Aide et FAQ     

Forum Conditions Générales

Blog d'Utilisation

Nous rejoindre Politique de Protection des


Données Personnelles

Nous contacter

Vous aimerez peut-être aussi