Pętla while

Pętle są podstawowym elementem składowym każdego programu. W Java występują ich trzy rodzaje:

  • while,
  • do while,
  • for.

W tym wpisie omówię dokładnie pierwszą z nich. Zaczynajmy!


Najprostszą pętlą w Java jest właśnie pętla while. Oto jak wygląda jej składnia:

Jak może zauważyłeś, składnia jest dość podobna do instrukcji if. Skojarzenie takie jest częściowo dobre. Nie mniej występuje tutaj pewna różnica, gdyż pętla while nie posiada odpowiednika instrukcji else oraz else if. Występuje tylko w takiej postaci jak powyżej.

Oto jak poprzedni przykład można przepisać z wykorzystaniem pętli while:

W sumie to wróciliśmy o punkt wyjścia, znowu mamy pięć linii w programie. Ale za to zmieniając wartość 6 program wyświetli nam ilość linii mniejszą o jeden od wpisanej wartości.
Przeanalizujmy teraz dokładnie ten przykład. W linii 3 deklarujemy zmienną i oraz ustawiamy jej wartość początkową na 1. Zmienna ta będzie spełniała zadanie licznika pętli. Czym jest licznik pętli? Jest to po prostu zmienna zliczająca ilość wykonań pętli.

W linii 4 rozpoczynamy pętlę while. Kod umieszczony w tej linii można przeczytać jako: dopóki zmienna i jest mniejsza niż 6, wykonuj poniższy blok kodu. Warunek w linii 4 jest zarówno warunkiem początkowym jak i kontynuowania pętli. Co to oznacza? Warunkiem początkowym określamy warunek który mówi czy pętla ma być w ogóle wykonywana. Jeżeli zmienił byś wartość jaką jest inicjalizowana zmienna i w linii 3 na coś większego od sześciu. To nie zobaczysz nic na ekranie, gdyż warunek początkowy nie został spełniony. Jak już się pewnie domyślasz warunek kontynuowania mówi kiedy pętla ma się przestać wykonywać. Warunek ten może też być zwany również wa runkiem stopu lub warunkiem zatrzymania pętli.

Dobrze, więc jak właściwie działa ta cała pętla while? Kiedy JVM napotka instrukcję while sprawdzi warunek jaki jest w niej podany (w przykładzie powyżej jest to: i < 6). Jeżeli jest on prawdziwy blok kodu zostanie wykonany, jeżeli warunek jest fałszywy zostanie on całkowicie pominięty. Zakładając, że warunek był prawdziwy JVM zacznie wykonywać blok pętli. Gdy wykonywanie tego bloku zostanie zakończone, warunek pętli zostanie jeszcze raz sprawdzony. Do póki warunek będzie prawdziwy blok kodu wewnątrz pętli będzie wykonywany. Jeżeli warunek pętli choć raz zwróci fałsz, wtedy pętla się już nie wykona, JVM zacznie wykonywać kod który znajduje się po pętli.

Wróćmy zatem do analizy programu. Ponieważ warunek początkowy pętli został spełniony wykonane zostaną instrukcje z linii 5 i 6. Najpierw wypisana zostanie aktualna wartość zmiennej i na ekranie (na chwilę obecną jest to ciągle 1). Potem zwiększona zostanie wartość tej zmiennej o jeden oraz ponownie sprawdzony będzie warunek pętli.

W drugiej iteracji (iteracjami nazywamy kolejne wykonania pętli) zostanie sprawdzony warunek: 2 < 6, gdyż aktualnie zmienna i zawiera wartość 2. Warunek ten jest prawdziwy, więc ponownie zostanie wykonany kod z linii 5 oraz 6. Tym razem jednak na ekranie zostanie wypisane 2 oraz zmienna i3.

Powyższe czynności zostaną powtórzone jeszcze trzy razy. Kiedy na ekranie zostanie wypisana liczba 5, zmienna i przyjmie wartość 6. Przy ponownym sprawdzeniu warunku pętli (6 < 6) jest fałszywy, co spowoduje zakończenie wykonywania się pętli while. Program zakończy swoje działanie.

Dla nabycia wprawy przeanalizujmy jeszcze jeden przykład:

Być może dziwi Ciebie kod w trzeciej linii. Otóż znajduje się tam inicjalizacja dwóch zmiennych i oraz j typu int. Taki zapis jest poprawny, jednak nie jest on często spotykany w programach napisanych w Java. Zazwyczaj wszystkie zmienne deklarowane i/lub inicjalizowane są w nowych liniach. Zachęcam Ciebie również do nie stosowania takiego zapisu jak powyżej. Podsumowując w linii 3 deklarujemy oraz inicjalizujemy wartością zero dwie zmienne i oraz j.

W następnej linii znajduje się pętla while ze złożonym warunkiem: i < 10 && j < 5. Ponieważ obie zmienne mają wartość 0 warunek jest spełniony więc przechodzimy do wykonania kodu w pętli.

W linii 5 sprawdzamy czy 0 jest podzielne przez 2 (gdy operacja modulo zwraca zero, oznacza to że liczba z lewej strony operatora jest podzielna przez tą z jego prawej strony). Warunek ten jest prawdziwy więc zwiększamy wartość zmiennej i o trzy. Po czym dziesiątej linii wypisujemy jej wartość, na ekranie pojawi się 3. Następnie inkrementujemy wartość zmiennej j. Blok pętli się kończy więc wracamy do sprawdzenia warunku w linii 5.

Po pierwszym przebiegu pętli zmienne zawierają następujące wartości:

  • i = 3,
  • j = 1.

Oba warunki składowe ciągle są spełnione więc ponownie wykonany będzie blok pętli.

Ponieważ operacja 3 % 2 zwróci 1, wykonany zostanie blok else. W którym to zmniejszymy wartość zmiennej i o jeden. Po czym jeszcze raz wypiszemy ją na ekran (tym razem zostanie wyświetlona liczba 2). Oraz znowu zwiększymy wartość zmiennej j o jeden. Ponownie wracamy do piątej linii programu.

Po drugim przebiegu pętli sytuacja wygląda następująco:

  • i = 2,
  • j = 2.

Tym razem również oba warunki składowe są prawdziwe, więc jeszcze raz wykonamy blok pętli. Powyższy scenariusz powtórzy się jeszcze trzy razy wypisując na ekranie kolejno:

Po wypisaniu liczby 7 wartość zmiennych programu wygląda następująco:

  • i = 7,
  • j = 5.

Przy takim stanie zmiennych pierwszy człon warunku w linii 5 będzie prawdziwy, jednak drugi człon będzie już fałszywy. Co w przypadku wykorzystania operatora && daje rezultat fałszywy. Więc program kończy swoje działanie. Na ekranie zobaczysz następujący wynik:

1 Comment Pętla while

  1. Marta

    Naprawdę dziękuje za ten wpis bardzo mi pomógł zrozumieć pętle while:) wogole bardzo fajny blog, przydaje mi się bardzo przy mojej nauce programowania 🙂 Dziękuję

    Reply

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *