Spis treści
W poprzednim rozdziale poznaliśmy trzy rodzaje pętli: while, do..while, oraz for. Języka Java posiada jeszcze jeden rodzaj pętli: for-each. Ten ostatni rodzaj pętli poznajemy dopiero teraz, ponieważ jest on dedykowany do pracy z tablicami i innymi kolekcjami.
Pętla for-each pozwala na łatwe iterowanie po tablicy bądź kolekcji. Jej składnia jest następująca:
for (typ nazwaZmiennejPetli : tablica_badz_kolekcja) { // instrukcje }
W pętli tej definiujemy zmienną pętli oraz jej typ, a po dwukropku podajemy tablicę (bądź kolekcję), którą chcemy przeprocesować. Typ zmiennej pętli powinien być zgodny z typem, jakie tablica może przechowywać. Zmienna pętli w każdym obiegu będzie zawierała wartość kolejnego elementu tablicy. Pętla kończy się, gdy przejdzie przez wszystkie elementy tablicy.
Spójrzmy na przykład programu, który korzysta z pętli for-each, by wypisać elementy tablicy:
public class ForEachWypiszElementy { public static void main(String[] args) { int[] liczby = { 1, 5, 20 }; for (int x : liczby) { System.out.print(x + ", "); } } }
W tym programie zmienna pętli nazywa się x i w każdym obiegu pętli przyjmuje wartość z tablicy liczby. Będą to, kolejno, liczby: 1, 5, oraz 20, ponieważ takie liczby przechowuje tablica liczby.
Zauważmy, że typ int zmiennej x jest zgodny z typem wartości, jakie przechowuje tablica liczby.
Ten program wypisze na ekran:
Pętla for-each ma dwie istotne cechy:
- zawsze procesuje ona elementy w kolejności od pierwszego do ostatniego,
- zawsze procesowane są wszystkie elementy tablicy (o ile nie skorzystamy z instrukcji break).
Pętla for-each jest wygodną alternatywą dla pętli for, ponieważ jest krótsza – nie musimy sami zadbać o nadanie zmiennej pętli odpowiedniej wartości, napisać warunku pętli, ani instrukcji kroku – wszystko dzieje się automatycznie. Wystarczy napisać ciało pętli.
Jeżeli potrzebujemy przeiterować po elementach tablicy, a indeks nie jest nam potrzebny, to powinniśmy stosować pętlę for-each, ponieważ jest prostsza w zapisie niż jej alternatywy. Nieraz zdarza się jednak, że potrzebujemy przeiterować tylko po części elementów, bądź w innej kolejności, lub jest nam potrzebny indeks – wtedy będziemy chcieli skorzystać np. z pętli for.