Jason. Cała informatyka w jednym miejscu!

Otwieramy drugą część materiału o pętlach w języku Java i skieruję Wasze oczy na to, jak się prezentuje pętla "while". Poprzednio było o pętli "for", więc jeśli Ciebie interesuje pojęcie pętli w programowaniu oraz sama pętla "for", to przejdź do tamtego artykułu. Dzisiaj bierzemy na tapetę pętlę "while" i zobaczymy w jakich sytuacjach to ONA okaże się bardziej przydatna 🙂.

PĘTLA "WHILE" W JĘZYKU JAVA SPRAWDZI SIĘ W INNYCH PRZYPADKACH NIŻ "FOR"

Wiemy już z poprzedniego materiału, że pętla "for" powinna być wykorzystywana w przypadkach, w których zdajemy sobie sprawę z liczby powtórzeń do przeprowadzenia. Pętla "while" znajduje swoje najlepsze zastosowanie w odwrotnych okolicznościach - kiedy nie sposób przewidzieć ile razy coś musi się powtórzyć. I to jest najcenniejsza rzecz jaką masz wyciągnąć z mojego artykułu! Przykłady z życia mogą być następujące:

  1. szukamy drogi do czegoś i ciągle pytamy ludzi, dopóki nie natrafimy na interesującą nas lokalizację (raczej nie ustalimy sobie limitu: "dobra, to ja spytam tylko 5 ludzi i dalej radzę sobie sam" 🤣)
  2. rysujemy coś na kartce i czynimy to tak długo, aż wreszcie skończymy (znowu, nie działamy na jakichś "razach użyć" pędzla czy ołówka: "użyję pędzla tylko 30 razy, bo nie chcę go mocno zużywać" 😂)

Mam nadzieję, że Cię w tej chwili rozbawiłem 😉. Właśnie wtedy pętla "for" odpada i sięgamy po pętlę "while", czyli: "czyń coś tak długo, aż określony warunek przestanie być spełniany" np. wciąż szukamy drogi do celu bądź rysunek nie został ukończony. Oczywiście, można użyć tej pętli do sytuacji, w których znamy liczbę iteracji do wykonania, jednak trzeba uważać bo łatwo dopuścić do pętli nieskończonej (szczegóły w dalszym ciągu)!

BUDOWA PĘTLI "WHILE"

Pętla "while" w języku Java jest o wiele mniej rozbudowana niż pętla "for", bowiem składa się tylko z części warunku wykonania, a jej postać wygląda tak:

while ([warunek wykonania]) {
	// instrukcje
}

Wewnątrz nawiasów okrągłych umieszczamy warunek przy użyciu poznanych operatorów relacyjnych. Może to być na przykład sprawdzenie czy jakaś zmienna jest mniejsza od wskazanego progu, aczkolwiek dużo częściej posłużycie się warunkiem, w którym nie ma jawnej informacji o zakończeniu. Na przykład funkcja zwracająca wartość logiczną o nazwie "notFoundYet". Gdzieś tam pod maską będzie zależność od wskazanych wartości, bo na tym polega programowanie przebiegu programu, lecz nie będzie to uzależnianie od konkretnej liczby powtórzeń (iteracji), tylko z góry nieokreślonej.

PRZYKŁAD NIEOKREŚLONEJ LICZBY ITERACJI

Dla lepszego zobrazowania możliwości wystąpienia takiej sytuacji, przygotowałem prosty program w którym losujemy (a tak naprawdę pseudolosujemy) liczbę z małego zakresu od 1 do 5 i program zakończy się w momencie, gdy wylosowaną liczbą będzie 4:

public static void main(String[] args) {
	Random random = new Random();
	int number;
	
	while ((number = random.nextInt(1, 6)) != 4) {
		System.out.println(number);
	}
	
	System.out.println("Koniec programu.");
}

W celu wylosowania liczby, musimy utworzyć sobie obiekt klasy "Random" i wywołać metodę "nextInt", która przypisuje do wskazanej zmiennej wylosowaną liczbę z podanego zakresu. Zakres ma w sobie małą pułapkę bowiem górna granica nie jest uwzględniana w losowaniu. Stąd trzeba podnieść o 1 do góry! Innymi słowy:

<A; B)

Przypisanie wartości wstawiłem już wewnątrz warunku wykonania pętli "while", co jest dopuszczalne jeśli otoczymy całą instrukcję nawiasami. Zastanów się teraz nad takim pytaniem: czy liczba powtórzeń będzie zawsze taka sama? Nie! To jest jeden z przypadków, w których nie da się ustalić precyzyjnej liczby iteracji za każdym razem. Jeżeli widzisz taką sytuację, to jest to dla Ciebie sygnał, że lepsza będzie pętla "while". Taki jest wniosek końcowy 😊.

WERSJA ZE ZMIENNĄ ITERACYJNĄ

Obiecałem, to piszę teraz o tym. Da się zrobić tak, żeby pętla "while" funkcjonowała tak samo, jak pętla "for", jednak ten zapis stosuje się rzadziej z powodu niepotrzebnego rozgrzebywania tych samych części poza nawiasy okrągłe:

int i = 0;
		
while (i < 10) {
	// instrukcje
	i++;
}

Tutaj też dbamy o inicjalizację zmiennej iteracyjnej oraz jej aktualizację, tylko z racji tego "porozrzucania" części jakie są w pętli "for" w jednym miejscu, jest o wiele łatwiej zapomnieć o modyfikacji zmiennej iteracyjnej, stąd doprowadzamy wtedy do pętli nieskończonej! Zakończę niniejszy artykuł ostatnią ważną informacją - pętla "while" NAJPIERW sprawdza czy warunek wykonania jest spełniony. W pętli "do while" na temat której poświęcę kolejny wpis, jest dokładnie odwrotnie. Najpierw wykonuje się instrukcje w środku, a potem jest sprawdzany warunek. Zatem, seria instrukcji ZAWSZE wykona się przynajmniej jeden raz!

Pętla "while" w języku Java

Pętla "while" zawiera tylko część warunku wykonania, przez co dużo lepiej sprawdza się w przypadkach, gdy liczba powtórzeń instrukcji do wykonania jest niewiadoma.


Z mojej strony to wszystko. Pamiętaj, to czy lepiej użyć jednej, czy drugiej pętli, zależy od tego, czy możesz przewidzieć ile jest potrzebnych iteracji.

NASTĘPNY ARTYKUŁ: Pętla do while w języku Java. Charakterystyka i zastosowania

PODOBNE ARTYKUŁY