JavaRush /Blog Java /Random-PL /pętla for-each w Javie

pętla for-each w Javie

Opublikowano w grupie Random-PL

Co to jest foreach w Javie?

For-each to rodzaj pętli for używanej, gdy trzeba przetworzyć wszystkie elementy tablicy lub kolekcji. „Dla każdego” jest tłumaczone z angielskiego jako „dla każdego”. Właściwie samo wyrażenie foreach nie jest używane w tym cyklu. Jego składnia jest następująca:
for (type itVar : array)
{
    Блок операторов;
}
Gdzie typejest typ zmiennej iteracyjnej (taki sam jak typ danych w tablicy!), itVarjest jej nazwa, arrayjest tablicą (może też istnieć inna struktura danych, jakiś rodzaj kolekcji, np. ArrayList), czyli obiekt, na którym wykonywana jest pętla. Jak widać, w tym projekcie nie używa się licznika; zmienna iteracyjna iteruje po elementach tablicy lub kolekcji, a nie po wartościach indeksu. Podczas wykonywania takiej pętli zmiennej iteracyjnej przypisywana jest sekwencyjnie wartość każdego elementu tablicy lub kolekcji, po czym wykonywany jest określony blok instrukcji (lub instrukcja).

Oprócz pętli for-each w Javie dostępna jest także metoda forEach(). Można o tym przeczytać np. w artykule „ Przestań pisać cykle!” 10 najlepszych najlepszych metod pracy z kolekcjami w Javie 8

Uwaga:Pętlę for-each można zastosować do tablic i dowolnych klas implementujących interfejs java.lang.Iterable. Odpowiednikiem powyższego kodu będzie następująca pętla for :
for (int i=0; i<array.length; i++)
{

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

Przykład Java foreach

Utwórzmy tablicę ocen uczniów. Następnie, używając for-each, drukujemy wszystkie wyniki, wyświetlamy średni wynik i znajdujemy maksymalny wynik.
public class ForEachTest {

//metoda, która wypisuje wszystkie oceny
public static void printAllGrades(int[] grades) {
        System.out.print("|");
        for (int num : grades) {

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

//metoda wyświetlająca średni wynik

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

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

    }
//metoda, w której obliczany jest najlepszy (maksymalny) wynik
    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) {

//tablica ocen
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));
    }

}
Dane wyjściowe programu:
All the grades: |5|10|7|8|9|9|10|12|
The highest grade is 12
The average grade is 8.75
Zobaczmy teraz, jak wyglądałaby metoda drukowania wszystkich partytur, wykonana przy użyciu zwykłej pętli for:
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();
    }
Jeśli wywołamy tę metodę z metody main, otrzymamy wynik:
All the grades: |5|10|7|8|9|9|10|12|

Przykład użycia pętli for-each z kolekcjami

Stwórzmy kolekcję nazw i wyświetlmy wszystkie nazwy na ekranie.
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);
        }

Ograniczenia pętli for-each

Kompaktową formę for-each uważa się za bardziej czytelną niż for i za dobrą praktykę uważa się używanie for-each tam, gdzie jest to możliwe. Jednak for-each jest mniej wszechstronną konstrukcją niż zwykła for. Oto kilka prostych przypadków, w których użycie for-each w ogóle nie zadziała lub będzie działać, ale z trudem.
  1. Jeśli chcesz przejść przez pętlę od końca do początku. Oznacza to, że nie ma bezpośredniego odpowiednika dla każdego następującego kodu:

    for (int i = array.length - 1; i >= 0; i--)
    {
          System.out.println(array[i]);
    }
  2. Funkcja For-each nie jest odpowiednia, jeśli chcesz wprowadzić zmiany w tablicy. Na przykład nie będzie możliwe sortowanie tablicy bez zamiany jej elementów. Lub w poniższym kodzie nie zmieni się element tablicy, a jedynie zmienna iteracji:

    for (int itVar : array)
    {
        itVar = itVar++;
    }
  3. Jeśli szukasz elementu w tablicy i musisz zwrócić (lub przekazać) indeks szukanego elementu, lepiej użyć zwykłej pętli for.

Przydatny film o for-each przygotowany przez studenta JavaRush

Pętle w kursie JavaRush

W JavaRush praktyczne wykorzystanie pętli zaczynamy już na 4. poziomie zadania Java Syntax . Poświęconych jest im kilka wykładów, a także wiele zadań o różnym stopniu zaawansowania, mających na celu ugruntowanie umiejętności pracy z nimi. Ogólnie rzecz biorąc, nie da się od nich uciec; pętle są jedną z najważniejszych konstrukcji w programowaniu.

Więcej o for-each i pętlach:

  1. Pętla For i For-Each: opowieść o tym, jak iterowałem, iterowałem, ale nie iterowałem - dobry, szczegółowy artykuł o pętlach for i for-each w Javie. Zaprojektowany dla wyszkolonego czytelnika (w przybliżeniu poziom JavaRush 10 i wyższy).
  2. Podczas gdy stwierdzenie . Artykuł poświęcony jest najprostszemu cyklowi while, z którym zaczynasz zapoznawać się z cyklami w JavaRush.
  3. Przestań pisać cykle! 10 najlepszych metod pracy z kolekcjami w Javie 8 . Z tego artykułu student JavaRush, który ukończył już połowę kursu lub więcej, dowie się wiele o pracy z kolekcjami.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION