Kurs Java

Pętla while

W ramach każdej metody, w tym również w metodzie startowej main, program Java zwyczajowo wykonywany jest linia po linii. Możemy wpłynąć na działanie domyślne poprzez zastosowanie instrukcji, które zmieniają naturalny porządek wykonywania operacji. Mieliśmy już do czynienia z instrukcjami, które wykonywały bądź pomijały pewne linie kodu (a nawet całe bloki), takie jak na przykład instrukcja if ... else czy switch. Teraz przedstawimy instrukcję while, która umożliwi nam wykonywanie określonego fragmentu kodu wielokrotnie (powtarzając wykonanie tych samych linii), aż do momentu zaistnienia warunku, który przerwie taką pętle.

Pętla while - jak to działa

Instrukcja while wykonuje blok kodu, do momentu w którym warunek jest prawdziwy.
while (warunek) {
  // Wykonywany blok kodu
}

Najlepiej będzie zobaczyć jak wygląda działanie tej instrukcji w praktyce:
int itemCounter = 0;
while (itemCounter < 5) {
    System.out.println(itemCounter);
    itemCounter++;
}

Wydruk wartości zmiennej itemCounter będzie wykonywany tak długo, dopóki wartość ta będzie mniejsza od 5, przy czym naszą początkową wartością jest 0. Pojedyncze sprawdzenie czy zmienna jest mniejsza od liczby 5 nie różni sie niczym od sprawdzenia wykonywanego za pomocą instrukcji warunkowej if. Oczywiście 0 jest mniejsze od 5 więc program wejdzie do bloku i wydrukuje na konsoli wartość 0:
System.out.println(itemCounter);
Zasadnicza różnica w stosunku do pojedynczej instrukcji warunkowej polega na tym, że po zakończeniu bloku instrukcja while rozpoczyna swoje działanie od początku (jest restartowana) i tak się dzieje za każdym razem gdy kończony jest blok. Program zaczyna kręcić się w kółko i dlatego bardzo ważne jest, aby można było znaleźć sposób na wyjście z takiej pętli. W tym celu za każdym razem gdy zbliżamy sie do końca bloku inkrementujemy (zwiększamy o 1) wartość zmiennej itemCounter:
    itemCounter++;
Tak więc po całym pierwszym wykonaniu kodu w bloku, itemCounter równa się 1. Dla tej wartości pętla wykonywana jest po raz kolejny, czyli wracamy do początku – do momentu sprawdzenia warunku:
while (itemCounter < 5)
Program sprawdza czy 1 < 5. Oczywiście jest to prawda, więc kod będzie wykonywany. Na ekranie zostanie wydrukowane 1, a następnie wartość itemCounter zostanie zwiększona o 1 – czyli będzie wynosić 2. Dokładnie tak samo system zachowa się dla wartości zmiennej 2, 3, 4. W momencie wykonania pętli dla wartości zmiennej równej 4, w ostatnim kroku, podobnie jak w poprzednich, wartość zostanie zwiększona o 1 - czyli teraz będzie równa 5. Po raz kolejny wracamy do wykonania pętli while i w tym momencie warunek 5 < 5 nie jest już prawdziwy. Zatem blok kodu umieszczony w pętli while nie zostanie już wykonany.

Pętla do ... while

W Javie oprócz podstawowego wariantu wersji pętli while, jaki przedstawiliśmy powyżej, wyróżniamy także pętlę do ... while. Ta pętla wykona blok kodu raz, przed sprawdzeniem czy warunek jest prawdziwy. Jeśli jest, wtedy pętla będzie powtarzana dopóty, dopóki warunek jest prawdziwy. Pętla zakończy swoje działanie.
do {
  // Blok kodu do wykonania
}
while (warunek);
Przejdźmy do przykładu:
int itemCounter = 0;
do {
    System.out.println(itemCounter);
    itemCounter++;
}
while (itemCounter < 5);
Pętla do ... while zawsze będzie wykonana na pewno raz – nawet jeśli warunek jest fałszywy, ponieważ najpierw wykonywany jest fragment kodu, a dopiero później sprawdzany jest warunek. W tym przykładzie pętla wykona się, jeśli wartość zmiennej będzie równa 0, 1, 2, 3, 4.
Weźmy teraz pod uwagę nieco inny przykład:
int itemCounter = 0;
do {
    System.out.println(itemCounter);
    itemCounter++;
}
while (itemCounter < 0);
Mimo, że 0 jest równe 0 to program i tak wejdzie do bloku kodu umieszczonego w nawiasach klamrowych po instrukcji do i wykona wydruk wartości zmiennej:
System.out.println(itemCounter);
czyli wydrukuje 0, oraz zwiększy wartość o 1.
Dopiero w tym momencie zostanie sprawdzony warunek:
while (i < 0)
Będzie on fałszywy, ponieważ zmienna ma wartość 1.
Dla porównania gdybyśmy ustawili wartość zmiennej itemCounter na 0 i próbowali wykonać ten sam warunek z użyciem pętli while:
int itemCounter = 0;
while (itemCounter < 0) {
    System.out.println(itemCounter);
    itemCounter ++;
}
Program Java nie wejdzie do bloku kodu, ponieważ warunek 0 < 0 jest fałszywy. W związku z tym na ekranie nie zostanie wydrukowana żadna wartość.

Przykład w programie

Teraz zobaczmy jak te pętle wyglądają w praktyce po wpięciu ich do naszego programu z rozdziału Hello JavAPPa:
public class Start {

    public static void main(String[] args) {
        System.out.println("Hello JavAPPa");

        int itemCounter = 0;
        while (itemCounter < 5) {
            System.out.println(itemCounter);
            itemCounter++;
        }

        itemCounter = 0;
        do {
            System.out.println(itemCounter);
            itemCounter++;
        }
        while (itemCounter < 5);
    }
}
Linki:
https://www.w3schools.com/java/java_while_loop.asp
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/while.html
Masz pytanie dotyczące tego rozdziału? Zadaj je nam!
Masz pytanie dotyczące prezentowanego materiału?
Coś jest dla Ciebie niejasne i Twoje wątpliwości przeszkadzają Ci w pełnym zrozumieniu treści?
Napisz do nas maila, a my chętnie znajdziemy odpowiednie rozwiązanie.
Najciekawsze pytania wraz z odpowiedziami będziemy publikować pod rozdziałem.
Nie czekaj. Naucz się programować jeszcze lepiej.
kursjava@javappa.com

Stale się rozwijamy, a więc bądź na bieżąco!
Na ten adres będziemy przesyłać informacje o ważniejszych aktualizacjach, a także o nowych materiałach pojawiających się na stronie.
Polub nas na Facebooku:
Nasi partnerzy: stackshare
Javappa to również profesjonalne usługi programistyczne oparte o technologie JAVA. Jeśli chesz nawiązać z nami kontakt w celu uzyskania doradztwa bądź stworzenia aplikacji webowej powinieneś poznać nasze doświadczenia.
Kliknij O nas .


Pozycjonowanie stron: Grupa TENSE