Luty 17, 2018

Pętle w języku Java – oszczędzajmy swój czas

Pętle w języku Java

Cześć, po ostatniej lekcji kursu powinieneś znać podstawowe typy danych jakich możemy używać podczas programowania w Java oraz potrafić zadeklarować zmienne.

W dzisiejszej lekcji kursu dowiesz się co nieco o pętlach w języku java, czyli jak one działają, jak potrafią ułatwić życie programiście oraz rodzaje pętli, które są dla nas dostępne. No to do dzieła.

Czym jest pętla

Pętla jest instrukcją, która pozwala wykonać dany kod X razy. Czyli w skrócie zamiast przepisywać kod X razy wystarczy do tego użyć pętli.

Przypuśćmy, że musimy wypisać pięć cyfr na ekran konsoli, nie znając pętli musielibyśmy zapisać taki kod:

System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);

 

Ewentualnie możemy zapisać to w jednej linii:

System.out.println(1 + "\n" + 2 + "\n" + 3 + "\n" + 4 + "\n" + 5)

 

Jednak nadal nie jest to dobre rozwiązanie, ponieważ co jeśli przyjdzie nam wypisać 100 liczb? No i tutaj przychodzą nam z pomocą pętle.

Dostępne pętle

for

Pętla for chyba jest najczęściej używana podczas pierwszych kroków programistycznych. Najczęściej stosowana jest do iteracji po tablicy (o tym w następnych częściach kursu) lub po prostu właśnie do proste wypisania liczb na ekran tak jak w naszym przykładzie wyżej.

Deklaracja pętli for wygląda następująco:

for(STAN_POCZĄTKOWY; WARUNEK_ZAKOŃCZENIA; INKREMENTACJA/DEKREMENTACJA){
  //kod do wykonania w każdym przejściu pętli
}

 

No to teraz wytłumaczmy o co w niej chodzi:

  • Stan początkowy – jest to stan np. wartość zmiennej z jaką startujemy pętle
  • Warunek zakończenia – czyli jest to jakiś warunek (np. =, <, > itd.), który definiuje zakończenie pętli (warto dodać, że jeżeli źle zapiszemy warunek to pętla będzie nieskończona, ponieważ warunke nigdy nie będzie miał szansy się spełnić!)
  • Inkrementacja/dekrementacja – jest to zazwyczaj zwiększenie(zmniejszenie) zmiennej (naszego licznika) o 1, jednak możemy tak naprawdę zwiększać/zmniejszać ją o ile tylko chcemy.

Stwórzmy, więc sobie kod, który za pomocą pętli for będzie wypisał nam na ekran liczby od 0 do 20.

for(int i=0;i<=20;i++){
  System.out.println(i);
}

 

Przeanalizujmy nasz kod. Ustawiamy początkową wartość zmiennej na 0 (w końcu chcemy wypisywać na ekran liczby od ), warunek kończący pętle jest taki, że pętla się kończy gdy zmienna jest równa 20, a liczby wyświetlają się co 1 ponieważ korzystamy z inkrementacji i++ (czyli zwiększ o 1). W każdem obejściu pętli korzystamy z println do wyświetlenia liczby na ekran.

Skoro w naszej pętli wykonujemy tylko jedną instrukcję możemy równie dobrze zapisać nasz bez klamer:

for(int i=0;i<=20;i++)
  System.out.println(i);

Kod działa nadal tak samo, jednak warto używać klamer bo nigdy nie wiadomo kiedy kod w tym miejscu się rozrośnie, więc i tak będzie potrzebne zastosowanie klamer.

while

Kolejną pętlą jest pętla while, ma ona inną deklaracja niż poprzednia pętla for. Pętla while jest wykonywana tylko wtedy, gdy warunek w nawiasie jest prawdziwy. Czyli jeżeli chcemy stworzyć nieskończoną pętlę while wystarczy o to taki zapis:

while(true){
  //infinite
}

Jednak możemy też użyć pętli while tak samo jak pętli for. Wystarczy kilka drobnych zmian.

int i = 0;
while(i<=20){
  System.out.println(i);
  i++;
}

Działanie pętli jest takie samo jak w przypadku poprzedniego przykładu, wyświetlone zostaną liczby od 0 do 20.

do while

Jest to trochę rozszerzona pętla while, a różni się tylko tym, że pętla do while jest wykonywana zawsze przynajmniej raz. Oznacza to, że warunek jest zawsze sprawdzany po wyjściu z pętli, a nie tak jak wcześniej się to działo w poprzednich przykładach warunek był sprawdzany przed wejściem w pętle.

Spójrzmy na budowę pętli do while

do{
  //code to do
}while(warunek);

Nawet gdy spojrzymy na jej strukturę to widzimy, że faktycznie najpierw wykonujemy kod, a na koniec sprawdzamy warunek – jeżeli warunek jest prawdziwy to wejdziemy jeszcze raz w pętle.

Przeanalizujmy teraz o to taki kod

int i = 10;
do{
  System.out.println(i);
}while(i++ < 10);

Co w tym przypadku się stanie? Spróbujmy się zastanowić nad tym kodem. Na początku tak jak mówiliśmy wcześniej kod wykona się zawsze przynajmniej raz, więc na pewno wyświetli się liczba 10 na ekran. Czas na sprawdzenie warunku, jeżeli liczba i jest mniejsza od 10 to wykonaj pętlę. No widzimy, że liczba 10 nie jest mniejsza od liczby 10, więc warunek nie jest spełniony. Dlatego kod wyświetli tylko liczbę 10 na ekran.

Warto zauważyć, że gdybyśmy zastosowali pętle while w tym przypadku zamiast pętli do while to ekran nie wyświetliłaby się liczba 10.

Mam nadzieję, że widzisz już znaczącą różnicę między pętlą while, a do while.

foreach

Do naszego zastosowania jest również gotowa czwarta pętla tzn. foreach, jednak nie będę jej teraz opisywał, ponieważ nie masz jeszcze wiedzy na temat kolekcji. Tak naprawdę przy pracy na kolekcjach właśnie przydaję się pętla foreach, ponieważ korzysta ona z iteratora, dobra wrócimy do tego w dalszej części kursu.

Zdecydowałem się o niej wspomnieć, abyś od początku miał pojęcie, że taka pętla w ogóle istnieje (a tak naprawdę jest później chyba najczęściej używana).

Zrób sam

Po dzisiejszej dawce informacji powinieneś byś w stanie wykonać krótkie zadania przygotowane przeze mnie. Pozwolą one Ci utrwalić informację o pętlach i później sprawnie wykorzystywać je w swoim kodzie. Nie pomijaj ich! Wykonaj je przed przystąpieniem do następnej lekcji.

  1. Za pomocą pętli for wypisz na ekran liczby ujemne, które są większe od -150.
  2. Za pomocą pętli while wypisz na ekran liczby większe od 123, jednak mniejsze od 200.
  3. Za pomocą pętli do while wypisz na ekran liczby dodatnie mniejsze od 99.

Wkrótce pojawi się tutaj repozytorium z kodem z przykładowymi rozwiązaniami przygotowanymi przeze mnie.

Podsumowując

W tej lekcji dowiedziałeś się o bardzo ważnym narzędziu w ręku programisty, dlatego nie podchodź do tej lekcji powierzchownie i porządnie ją przećwicz, abyś mógł w 100% brać udział w kolejnych lekcjach kursu i bez problemu rozwiązywać kolejne zadania przygotowane do każdej lekcji.

Zachęcam do komentowania wpisu wraz ze swoimi przykładowymi rozwiązaniami zadań oraz napisaniu o swoich ewentualnych problemach związanych z rozwiązaniem. Dodatkowo jeżeli, któreś zagadnienie jest dla Ciebie problematyczne to napisz o nim, a wyjaśnię Ci je inaczej, cześć!