CodeGym /Java-Blog /Germany /Die for-each-Schleife in Java
Autor
Artem Divertitto
Senior Android Developer at United Tech

Die for-each-Schleife in Java

Veröffentlicht in der Gruppe Germany

Was ist eine for-each-Schleife?

for-each ist eine Art for-Schleife, die du verwendest, wenn du alle Elemente eines Arrays oder einer Collection verarbeiten musst. Allerdings wird der Ausdruck for-each in dieser Schleife eigentlich nicht verwendet. Die Syntax lautet wie folgt:

for (type itVar : array) 
{ 
    // Operations
}
Wobei type der Typ der Iterator-Variable ist (der dem Datentyp der Elemente im Array entspricht!), itVar ihr Name und array ein Array (andere Datenstrukturen sind auch erlaubt, z. B. eine Collection, wie ArrayList), d. h. das Objekt, auf dem die Schleife ausgeführt wird. Wie du siehst, wird bei diesem Konstrukt kein Zähler verwendet: Die Iterator-Variable iteriert einfach über die Elemente des Arrays oder der Collection. Wenn eine solche Schleife ausgeführt wird, wird der Iterator-Variable nacheinander der Wert jedes Elements des Arrays oder der Collection zugewiesen, woraufhin der angegebene Anweisungsblock (oder die Anweisung) ausgeführt wird. Hinweis: Eine for-each-Schleife kann auf Arrays und alle Klassen angewendet werden, die das Interface java.lang.Iterable implementieren. Die folgende for-Schleife würde dem obigen Code entsprechen:

for (int i=0; i < array.length; i++) 
{ 
    
    // Statements 
}

Beispiel für eine for-each-Schleife

Wir erstellen ein Array mit Punktzahlen von Schülern. Dann verwenden wir eine for-each-Schleife, um alle Werte auszudrucken, die durchschnittliche Punktzahl zu berechnen und die höchste Punktzahl zu ermitteln.

public class ForEachTest {
    
// A method that prints all scores     
public static void printAllScores(int[] scores) {
        System.out.print("|");
        for (int num : scores) {

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

// A method that displays the average score 
    
public static double getAverageScore(int[] numbers) {
        int totalScore = 0;

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

    }
// A method that determines the best (maximum) score 
    public static int getBestScore(int[] numbers) {
        int maxScore = numbers[0];

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

public static void main(String[] args) {
      
// Array of scores 
int[] scores = {5, 10, 7, 8, 9, 9, 10, 12};

        
  int bestScore = getBestScore(scores);
        System.out.print("All the scores: ");
        printAllScores(scores);
        System.out.println("The highest score is " + bestScore);
        System.out.println("The average score is " + getAverageScore(scores));
    }

}
Programmausgabe:

All the scores: |5|10|7|8|9|9|10|12|
The highest score is 12
The average score is 8.75
Sehen wir uns nun an, wie eine Methode zum Ausgeben aller Punktzahlen aussehen würde, wenn wir eine gewöhnliche for-Schleife verwenden würden:

public static void printAllScores(int[] scores) {
        System.out.print("|");
        for (int i = 0; i < scores.length; i++) {

            System.out.print(scores[i] + "|");
        }
        System.out.println();
    }
Wenn wir diese Methode von der main-Methode aus aufrufen, erhalten wir dieses Ergebnis:

All the scores: |5|10|7|8|9|9|10|12|

Beispiel für eine for-each-Schleife mit Collections

Wir erstellen eine Collection von Namen und zeigen alle Namen auf dem Bildschirm an.

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);
        }

Beschränkungen einer for-each-Schleife

Die kompakte Form der for-each-Schleife gilt als einfacher zu lesen als eine for-Schleife, und es gilt als Best Practice, wann immer möglich eine for-each-Schleife zu verwenden. Eine for-each-Schleife ist jedoch ein weniger universelles Konstrukt als eine gewöhnliche for-Schleife. Hier sind einige einfache Fälle, in denen eine for-each-Schleife entweder gar nicht oder nur mit Schwierigkeiten funktioniert.
  1. Wenn du eine Schleife vom Ende zum Anfang durchlaufen willst. Das heißt, es gibt keine for-each-Schleife, die eine direkte Entsprechung zum folgenden Code wäre:

    
    for (int i= array.length-1; i>0; i--) 
    {
          System.out.println(array[i]);
    }
    
  2. for-each ist nicht geeignet, wenn du Änderungen an einem Array vornehmen willst. Du kannst zum Beispiel ein Array nicht sortieren, ohne die Position der Elemente zu ändern. Außerdem ändert sich im folgenden Code nur die Iterator-Variable, nicht das Element des Arrays:

    
    for (int itVar : array) 
    {
        itVar = itVar++; 
    }
    
  3. Wenn du nach einem Element in einem Array suchst und den Index des gesuchten Elements zurückgeben (oder weitergeben) musst, dann ist es besser, eine gewöhnliche for-Schleife zu verwenden.

Schleifen im CodeGym-Kurs

Bei CodeGym beginnen wir mit dem Üben von Schleifen auf Level 4 der Java Syntax Quest. Mehrere der Lektionen auf diesem Level sowie viele der Aufgaben in den verschiedenen Levels sind Schleifen gewidmet, um deine Fähigkeiten im Umgang mit ihnen zu stärken. Im Grunde gibt es keine Möglichkeit, ihnen zu entkommen – Schleifen sind eines der wichtigsten Konstrukte in der Programmierung. Die for-each-Schleife in Java - 1

Mehr Informationen über for-each und andere Schleifen

  1. Die while-Anweisung. In diesem Artikel geht es um die einfachste Art von Schleife: die while-Schleife, die CodeGym verwendet, um den Teilnehmern Schleifen vorzustellen.
  2. Hör auf, Schleifen zu schreiben! 10 Tipps für die Arbeit mit Collections in Java 8. Dieser Artikel hilft CodeGym-Teilnehmern, die mindestens die Hälfte des Kurses absolviert haben, viele interessante Dinge über die Arbeit mit Collections zu lernen.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION