Twitter: @grzegg
Kategoria: java, Tagi: - - .

Java [12] – Pętle cz. I

Pętle są instrukcjami pozwalającymi na cykliczne wykonywanie tego samego fragmentu kodu. Wykorzystujemy je, gdy określoną sekwencje komend należy wykonać wielokrotnie, na przykład przetwarzając kolejne serie danych. Jednak zanim przejdziemy do pętli, poznamy operatory inkrementacji i dekrementacji a także skrócone operatory arytmetyczne. Jak się okaże mają one (zwłaszcza te pierwsze) związek z pętlami.

Ta strona jest częścią materiałów do kursu “Programowanie w Javie z elementami bioinformatyki dla poczatkujących”. Pozostałe materiały znajdziesz tutaj

Operatory inkrementacji i dekrementacji

Jeśli chcemy zwiększyć wartość zmiennej o 1 możemy użyć takiego kodu: liczba = liczba + 1. Jest to prawidłowy kod ale można go skrócić używając operatora ++, czyli operatora inkrementacji. Używamy w na przykład w ten sposób:

Jak widać, wyrażenie liczba++ oznacza zwiększenie wartości zmiennej liczba o 1. Operatora można także użyć przed nazwą zmiennej, ale wtedy jego działanie jest nieco inne. Wykonaj kod:

Otrzymany wynik powinien wyglądać tak:


x++ 1 2
++y 2 2

Zauważ, że w przypadku x pierwsza z liczb ma wartość pierwotną (1) a druga zwiększona o jeden (2), natomiast dla y obie wypisane liczby mają wartość 2. Dzieje się tak dlatego, że jeśli operator ++ jest umieszczony po nazwie zmiennej to najpierw zwracana jest wartość zmiennej a dopiero potem jej wartość jest zwiększana o 1. W drugim przypadku najpierw ulega zmianie wartość zmiennej a później jest ona zwracana. Należy pamiętać o tej, wydawałoby się subtelnej, różnicy, ponieważ jeśli źle umieścimy operator inkrementacji to program może działać niezgodnie z założeniami.

Lustrzanym odbiciem operatora inkrementacji, jest operator dekrementacji, czyli , który służy jak nietrudno się domyśleć do zmniejszania o 1 wartości zmiennej. Działa on analogicznie do operatora ++.

Skrócone operatory arytmetyczne

Skoro już mowa o skróconych wersjach wyrażeń to warto wspomnieć o skróconych operatorach arytmetyczych, które służą jak sama nazwa wskazuje do krótszego zapisu pewnych operacji arytmetycznych.
Ich znaczenia znajdują się poniższej tabelce

wyrażenie znaczenie
x += y x = x + y
x -= y x = x – y
x *= y x = x * y
x /= y x = x / y

Pętle

W językach programowania, a w więc i w Javie, istnieje istnieje kilka rodzajów pętli. W wielu przypadkach można je stosować zamiennie ale lepiej wykorzystać różnice w ich konstrukcji i sposobie działania tak, aby dobrać właściwy rodzaj pętli do wykonania określonego rodzaju zadania.

Pętla obejmuje pewien blok kodu. Ogólna zasada działania pętli jest taka, że wykonuje się on cyklicznie dopóki określony warunek jest spełniony. Kiedy warunek przestaje być spełniony, program wychodzi z pętli i wykonywane są następne polecenia.

Pętla while

Jest to pętla o najprostszej konstrukcji, która wygląda tak:

while (warunek) {
   // Kod, który się wykonuje, dopóki warunek jest spełniony
}

Jak widać pętla while przypomina konstrukcję if, z tą różnicą, że blok kodu objęty wykonuje się wielokrotnie aż do chwili w której warunek nie zwróci wartości false. Zobaczmy na przykładzie jak to działa.

Powyższy kod można przedstawić na schemacie blokowym:


Uruchomiony program powinien zwrócić taki wynik:


W pętli i = 1
W pętli i = 2
W pętli i = 3
Poza pętlą i = 4

Przeanalizujmy teraz jak program działa. Na początku wartość zmiennej i jest ustawiona na 1. Następnie sprawdzony jest warunek i <= 3. Ponieważ w tej chwili i jest równe 1, warunek jest spełniony, rozpoczyna się wykonywanie kodu objętego pętlą. Najpierw jest wypisywana wartość i a w następnym kroku jest ona zwiększana o 1. Ponieważ to jest koniec kodu objętego pętlą, program wraca do początku pętli, gdzie znów sprawdzana jest sprawdzana wartość i. Ponieważ teraz ma ona wartość 2 więc dalej warunek jest spełniony, ponownie wykonywany jest kod w pętli. Proces się powtarza aż zmienna i osiągnie wartość większą niż 3. Wtedy po sprawdzeniu wyrażenia warunkowego i <=3, które tym razem zwróci wartość false program przechodzi do miejsca w kodzie, które znajduje się po zakończeniu pętli. Wypisana zostanie wartość i co kończy działanie programu.

Pojedyncze wykonanie instrukcji zawartych w pętli nazywamy iteracją (łac. iteratio – powtarzanie).

Pętla do … while

Ogólny schemat pętli do … while wygląda tak:

Ten rodzaj pętli działa podobnie do while, z tą różnicą, że najpierw wykonywany jest kod objęty pętlą (przynajmniej raz) a potem sprawdzany jest warunek. Aby to sprawdzić wykonaj kod:

int i = 5;
do {
   System.out.println("W pętli i = " + i);
} while (i <= 3);

Wynik jest następujący:


W pętli i = 5

Jak widać, chociaż wartość i od początku przekraczała 3, kod wykonał się.

Pętle do … while stosujemy wtedy, gdy chcemy mieć pewność, że kod zostanie wykonany przynajmniej raz.

Pętle while oraz do … while w intrakcji z użytkownikiem

Jednym z szerzej stosowanych zastosowań pętli while oraz do … while jest cykliczne wykonywanie zadań dopóki użytkownik nie zechce ich przerwać. W takim przypadku zwykle warunek w pętli sprawdza czy użytkownik nie wprowadził informacji o chęci zakończenia programu.
Zilustruję to na przykładzie omawianego w lekcjach 06 i 08 programu, który miał pomagać w uzyskaniu roztworu o określonym stężeniu. Teraz program zostanie zmodyfikowany tak, aby użytkownik mógł obliczać stężenia wielokrotnie.

Teraz część programu pobierająca dane od użytkownika i wykonująca obliczenia jest objęta pętlą do … while. Pętla najpierw raz wykonuje pracę a na końcu użytkownik jest pytany o to, czy chce zakończyć pracę. Jeśli wprowadził inny znak niż „K” (wielkość bez znaczenia) to pętla wykonuje się powtórnie. Kiedy użytkownik wybierze „K” to program wychodzi w pętli, komunikuje koniec i kończy działanie.

Działanie programu przedstawione w schemacie blokowym wygląda tak:


Wróćmy jeszcze do początkowej części kodu. Zauważ, że zadeklarowałem zmienną opcja przed pętlą. Gdybym to zrobił w bloku kodu objętym pętlą, nie byłaby widoczna dla kodu poza tym blokiem, nie mogłaby więc byś wykorzystywana w wyrażeniu warunkowym. Ten przypadek pokazuje, że widoczność zmiennych dla programu może być ograniczona do jego części. Tak jest na przykład w przypadku bloków kodu objętych przez takie instrukcje jak if, while itd. Jeśli zadeklarujemy jakąś zmienną w ich obrębie, nie będzie widoczna na zewnątrz. Do kwestii widoczności zmiennych jeszcze wrócimy.

Innym zastosowaniem pętli typu while i do … while może być sprawdzanie, czy dane wprowadzone przez użytkownika są prawidłowe a w przypadku błędnych danych umożliwienie ponownego ich wprowadzenia. Przykładowo, zmodyfikujmy powyższy program tak, aby jeśli użytkownik wprowadzi stężenie procentowe większe niż 100 to program będzie ponawiał pytanie aż do skutku. W tym celu modyfikujemy odpowiedni fragment kodu tak:

Zadanie

Spróbuj zmodyfikować powyższy program tak, żeby:
1. Użytkownik już na początku mógł zdecydować że nie chce niczego liczyć i chce od razu zakończyć program.
2. Jeśli użytkownik wprowadzi błędne dane dotyczące stężenia procentowego to przy powtórnym pytaniu będzie miał możliwość zakończenia programu.

Ta strona jest częścią materiałów do kursu “Programowanie w Javie z elementami bioinformatyki dla poczatkujących”. Pozostałe materiały znajdziesz tutaj

2 komentarze Java [12] – Pętle cz. I

Leave a Reply