Aller au contenu

Boucles en Java

Boucles du site lesjoiesducode.fr

Comme vous pouvez le constater sur cette illustration, une boucle mal utilisée peut être fatale !

Nous allons voir dans cette page les 4 types de boucle en java.

for (iteration contrôlée avec paramètres)

Code Java (sans JDoodle)

public class MonTableau {
    public static void main(String args[]) {
        
        int[] tableau = {1, 2, 3, 4, 5}; // déclaration et initialisation
        int total = 0; // déclaration et initialisation
        // boucle for pour parcourir les éléments du tableau
        // on peut aussi l'écrire comme ceci : for (int i=0;i<tableau.length;i++)
        for (int i = 0 ; i < tableau.length ; i = i + 1)
        {
            System.out.println("indice " + i +" valeur stockée : " + tableau[i]);
            total+=tableau[i];
        }
        // affichage du résultat dans la console
        System.out.println("Total des valeurs stockées dans le tableau = "+ total);
    }
}

foreach (très pratique et plus simple que la version précédente)

Code Java (sans JDoodle)

 public class MonTableau {
    public static void main(String args[]) {
        
        int[] tableau = {1, 2, 3, 4, 5}; // déclaration et initialisation
        int total = 0; // déclaration et initialisation
        // boucle foreach pour parcourir les éléments du tableau
       for (int i : tableau)
        {
            System.out.println("Valeur stockée : " + i);
            total+=i;
        }
        // affichage du résultat dans la console
        System.out.println("Total des valeurs stockées dans le tableau = "+ total);
    }
}

Quelle différence trouvez-vous entre les 2 boucles for ?

Je vous aide ;) dans la seconde (foreach) le i correspond aux valeurs stockées et non à l’itération. Donc, faites bien attention de choisir la boucle idéale pour votre algorithme ! Si vous avez besoin de l’indice, choisissez la première, sinon la seconde est bien pratique si vous devez lire des objets sans vous soucier de la position de ces derniers.

Sortie de boucle : break, continue

Code Java (sans JDoodle)

public class MonGrosBreak {
    public static void main(String args[]) {
    
        int i, k;    
        boucle1: for(i=1; i < 7; i++)
        {
            System.out.printf("Boucle i :%d%n",i); 
            for(k=0; k < 5; k++) 
            {
                System.out.printf("  Boucle k :%d",k); 
                if (k == 3) break; // on sort de la boucle interne (boucle k)
                // sinon on continue
                if (i == 3 || i == 5)
                {
                    System.out.println("  Mince, pas de petit break :(");
                    continue boucle1; 	// on continue la boucle1 avec la prochaine itération, on ne fait pas le petit break :(
                }
                // Que se passe t-il ?
            } // fin de la boucle interne (sans étiquette)
        // le break vient exécuter cette ligne ci-dessous
        System.out.printf("  Ouf ! Grâce à la valeur %d, je suis sortie de la boucle k pour faire un petit break !%n",k);
        // du coup la valeur de k sera de nouveau égale à zéro
        } // fin de la boucle externe boucle1
        // le break vient exécuter cette ligne ci-dessous
        System.out.printf("Ouf ! je suis enfin sortie de la boucle1 pour faire un gros break !) %n",i);
    }
}

While (iteration de zéro à n fois)

Code Java (sans JDoodle)

import java.util.Arrays;
import java.util.OptionalDouble;

public class MaBoucleWhile {
    public static void main(String args[]) {
        int[] tableau = {10, 20, 13, 14, 15}; // déclaration et initialisation
        int total = 0; // déclaration et initialisation
        int i = 0;  // indice pour extraire les valeurs de notre tableau composé de 5 éléments (de 0 à 4)
        while ( i < tableau.length ) // tant que la valeur de i est inférieure au nombre d'éléments dans la tableau
        {
            total+= tableau[i];
            i = i + 1;
        }
        // affichage dans la console :
        System.out.printf("total de %d sur %d notes%n",total, tableau.length);
        // Petite démo de calcul d'une moyenne possible depuis Java 8 (Lambda et Optional)
        // on verra cette syntaxe particulière ultérieurement
       OptionalDouble moyenne = Arrays.stream(tableau).average();
       moyenne.ifPresent(valeur -> { System.out.printf("Moyenne des notes : %.2f",valeur);});
    }
}

Do … while (iteration de 1 à n fois)

Principe, on entre au moins une fois dans la boucle. La condition est testée à la fin dans le while.

Pensez à sélectionner Interactive pour saisir vos réponses dans la console en ligne !

Code Java (sans JDoodle)

import java.util.Arrays;
import java.util.Scanner;
import java.util.InputMismatchException;

/**
 * Intéret et utilisation d'une boucle Do... While
 * Ici pour illustrer le choix de quitter ou pas !
 *
 */
public class MaBoucleDoWhile {
    
    public static void main(String args[]) {
        
        try
        {
            boolean quitter = false;
            do
            {
                System.out.println("Voulez-vous quitter (O/N) ?");
                Scanner scanner = new Scanner(System.in);
                String reponse = scanner.nextLine();
                if (reponse.equalsIgnoreCase("O")) quitter=true;
           
            }while(!quitter);
            
            System.out.println("Vous avez quitté ;)");
            
        }catch(InputMismatchException e)
            {
                System.out.println("Erreur de saisie !");
            }
    }
}

Documentation Java sur les bases en java

Lien ci-dessous vers le site de quelqu’un qui maîtrise bien Java !

bases de java avec JMDoudoux