JavaRush /Blog Java /Random-FR /boucle pour chaque en Java

boucle pour chaque en Java

Publié dans le groupe Random-FR

Qu’est-ce que foreach en Java ?

For-each est un type de boucle for utilisé lorsque vous devez traiter tous les éléments d'un tableau ou d'une collection. « Pour chacun » est traduit de l'anglais par « pour tout le monde ». En fait, l’expression foreach elle-même n’est pas utilisée dans ce cycle. Sa syntaxe est la suivante :
for (type itVar : array)
{
    Блок операторов;
}
typeest le type de la variable itérative (le même que le type de données dans le tableau !), itVarest son nom, arrayest le tableau (il peut aussi y avoir une autre structure de données, une sorte de collection, par exemple ArrayList), c'est-à-dire le objet sur lequel la boucle est exécutée. Comme vous pouvez le voir, un compteur n'est pas utilisé dans cette conception ; la variable d'itération parcourt les éléments d'un tableau ou d'une collection, et non les valeurs d'index. Lors de l'exécution d'une telle boucle, la variable d'itération se voit attribuer séquentiellement la valeur de chaque élément du tableau ou de la collection, après quoi le bloc d'instructions (ou instruction) spécifié est exécuté.

Outre la boucle for-each, Java dispose également d'une méthode forEach(). Vous pouvez en savoir plus à ce sujet, par exemple, dans l'article « Arrêtez d'écrire des cycles ! » Top 10 des meilleures méthodes pour travailler avec des collections en Java 8 »

Attention:La boucle for-each peut être appliquée aux tableaux et à toutes les classes qui implémentent l'interface java.lang.Iterable. L'équivalent du code ci-dessus serait la boucle for suivante :
for (int i=0; i<array.length; i++)
{

    Блок операторов;
}

Exemple Java pour chaque

Créons un tableau de notes d'élèves. Ensuite, en utilisant for-each, nous imprimons tous les scores, affichons le score moyen et trouvons le score maximum.
public class ForEachTest {

//method that prints all grades
public static void printAllGrades(int[] grades) {
        System.out.print("|");
        for (int num : grades) {

            System.out.print(num + "|");
        }
        System.out.println();
    }

//method that displays the average score

public static double midGrade(int[] numbers) {
        int grade = 0;

        for (int num : numbers) {
            grade = num + grade;
        }
        return ((double) grade / numbers.length);

    }
//method in which the best (maximum) score is calculated
    public static int bestGrade(int[] numbers) {
        int maxGrade = numbers[0];

        for (int num : numbers) {
            if (num > maxGrade) {
                maxGrade = num;
            }
        }
        return maxGrade;
    }

public static void main(String[] args) {

//array of ratings
int[] grades = {5, 10, 7, 8, 9, 9, 10, 12};


  int highest_marks = bestGrade(grades);
        System.out.print("All the grades: ");
        printAllGrades(grades);
        System.out.println("The highest grade is " + highest_marks);
        System.out.println("The average grade is " + midGrade(grades));
    }

}
Résultat du programme :
All the grades: |5|10|7|8|9|9|10|12|
The highest grade is 12
The average grade is 8.75
Voyons maintenant à quoi ressemblerait une méthode pour imprimer toutes les partitions, réalisée à l'aide d'une boucle for normale :
public static void printAllGrades(int[] grades) {
        System.out.print("|");
        for (int i = 0; i < grades.length; i++) {

            System.out.print(grades[i] + "|");
        }
        System.out.println();
    }
Si nous appelons cette méthode depuis la méthode main, nous obtiendrons le résultat :
All the grades: |5|10|7|8|9|9|10|12|

Un exemple d'utilisation d'une boucle for-each avec des collections

Créons une collection de noms et affichons tous les noms à l'écran.
List<String> names = new ArrayList<>();
        names.add("Snoopy");
        names.add("Charlie");
        names.add("Linus");
        names.add("Shroeder");
        names.add("Woodstock");

        for(String name : names){
            System.out.println(name);
        }

Limites de la boucle for-each

La forme compacte de for-each est considérée comme plus lisible que celle de for, et il est considéré comme une bonne pratique de l'utiliser lorsque cela est possible. Cependant, for-each est une construction moins polyvalente que for-each. Voici quelques cas simples où l'utilisation de for-each ne fonctionnera pas du tout ou fonctionnera, mais avec difficulté.
  1. Si vous souhaitez parcourir une boucle de la fin au début. Autrement dit, il n’existe pas d’analogue direct pour chaque code suivant :

    for (int i = array.length - 1; i >= 0; i--)
    {
          System.out.println(array[i]);
    }
  2. For-each ne convient pas si vous souhaitez apporter des modifications à un tableau. Par exemple, il ne sera pas possible de trier un tableau sans permuter ses éléments. Ou bien, dans le code suivant, ce n'est pas l'élément du tableau qui va changer, mais seulement la variable d'itération :

    for (int itVar : array)
    {
        itVar = itVar++;
    }
  3. Si vous recherchez un élément dans un tableau et devez renvoyer (ou transmettre) l'index de l'élément que vous recherchez, il est préférable d'utiliser une boucle for classique.

Vidéo utile sur for-each préparée par un étudiant JavaRush

Boucles dans le cours JavaRush

Chez JavaRush, nous commençons à utiliser les boucles en pratique au niveau 4 de la quête Java Syntax . Plusieurs conférences leur sont consacrées, ainsi que de nombreuses tâches de différents niveaux pour renforcer les compétences nécessaires pour travailler avec eux. En général, vous ne pouvez pas y échapper ; les boucles sont l’une des constructions les plus importantes en programmation.

En savoir plus sur for-each et les boucles :

  1. Boucle For et For-Each : l'histoire de la façon dont j'ai itéré, itéré, mais n'ai pas itéré - un bon article détaillé sur les boucles for et for-each en Java. Conçu pour un lecteur formé (environ JavaRush niveau 10 et supérieur).
  2. Tandis que la déclaration . L'article est consacré au cycle le plus simple whileavec lequel vous commencez à vous familiariser avec les cycles dans JavaRush.
  3. Arrêtez les cycles d’écriture ! Top 10 des meilleures méthodes pour travailler avec des collections en Java 8 . Grâce à cet article, un étudiant JavaRush qui a déjà suivi la moitié du cours ou plus en apprendra beaucoup sur le travail avec les collections.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION