Szukaj

1944

Reklama

Chroń swoje dziecko

w Internecie
Reklama

za darmo ...

Kalendarz

Reklama

Jak odbierasz ...

Wygląd portalu
 

"Musicie od siebie wymagać, nawet jeśli inni by od Was nie wymagali..." JP2 [100%]

Reklama
Pętle WHILE PDF Drukuj Email
Ocena użytkowników: / 2
SłabyŚwietny 
Instrukcje dodatkowe - Programowanie w języku JAVA
Wpisany przez Administrator   
Spis treści
Pętle WHILE
Przejdź do pętli WHILE
Przejdź do instrukcji BREAK
Przejdź do instrukcji CONTINUE
Wszystkie strony

 

Z tej lekcji nauczysz się :

 

-stosować pętlę WHILE

-stosować instrukcję CONTINUE

-stosować instrukcję BREAK

 

 


 

PĘTLA WHILE

Przyjrzyjmy się jeszcze raz programowi z poprzedniej lekcji. Przypomnijmy ten program:

{ Napisz program, który tworzy macierz liczb całkowitych podanych przez użytkownika. O ilości elementów w macierzy (czyli jej rozmiarze) również decyduje użytkownik. Po zakończeniu wprowadzania danych przez użytkownika program wyświetla po kolei wszystkie wartości. }

Listing do programu:

Przypomnijmy, że użytkownik, aby zakończyć wprowadzanie danych musiał podać wartość zero lub mniejszą niż zero., po czym program przechodził do wyświetlania pobranych od użytkownika danych. Jeśli użytkownik podał od razu wartość równą zero lub mniejszą niż zero, program kończył procedurę wprowadzania danych i rozpoczął wyświetlanie.. elementów tablicy pustej:

Wyraźnie jest napisane, że tablica zawiera 0 elementów, natomiast wyświetlony jest element pierwszy {którego nie ma} równy zero. Skąd ten błąd i dlaczego tak się dzieje?

 

Odpowiedź jest prosta i kryje się w budowie pętli do..while. Jeszcze raz przypomnijmy sobie jej składnię i działanie:

do{

instrukcje

}while(warunek jest spełniony);

Zauważ, że program sprawdza, czy dany warunek jest spełniony dopiero po pierwszym przebiegu instrukcji. Czyli pętla wykona się przynajmniej jeden raz, zanim sprawdzony zostanie warunek, czy powinna się dalej wykonywać. Stąd problem z błędem, który przedstawiono na przykładzie powyżej. Dlaczego jednak program nie zawiesił się, tylko wyświetlił nieistniejący element pustej tablicy? Odpowiedź jest również bardzo prosta: tablica nie jest pusta, tylko zawiera 1000 elementów typu double, które zainicjowane są z wartością zero.

Oznacza to, że w momencie tworzenia tablicy zdefiniowano, że ma ona 1000 elementów i od razu przypisano jej wartość zero.  Zrobiliśmy tak dlatego,że język Java nie zawiera prostego sposobu na zdefiniowanie tzw. tablic dynamicznych, czyli takich,których rozmiar może być zmieniany w miarę potrzeb. Możliwości takie mają inne języki,natomiast Java, głównie ze względu na kwestie stabilności działania programów w niej napisanych nie daje takiej opcji. Dlatego tworząc tablicę, w której nie wiemy, ile elementów będzie wykorzystanych stworzyliśmy ją bardzo dużą, aby mieć pewność, że nie będzie za mała. Również ze względu na specyfikę języka, zainicjowaliśmy tablicę wypełniając ją "zerami".

Przejdźmy teraz do rozwiązania naszego problemu. W jaki sposób zapobiec wyświetlaniu, w naszym programie elementów, które nie istnieją?

Jedną z możliwości jest wykorzystanie innej pętli, takiej, która od razu sprawdza, czy w ogóle choć raz powinny się wykonać zawarte w niej instrukcje. Taką pętlą jest iteracja while(). Składnia pętli jest taka:

while (warunek jest spełniony)

{

instrukcje

}

w porównaniu do pętli do..while różni się ona właśnie tym, że instrukcja sprawdzająca wystąpienie warunku wykonywania przesunięta jest na początek.

Oto, jak powinniśmy zmodyfikować nasz program, aby wszystko działało jak należy:

Oto efekt uruchomienia programu dla dwóch wariantów:

a)tablica zawiera jakieś elementy:

b) tablica jest pusta

Zadanie dla utrwalenia:

Zadanie 1: napisz program, który prosi użytkownika o podawanie wartości ujemnych lub równych zero. jeśli użytkownik poda wartość większą niż zero to program wyświetla wprowadzone dane i przechodzi do ich wyświetlenia (jeśli takowe w ogóle są).

 


 

INSTRUKCJA BREAK:

Poznaliśmy trzy rodzaje iteracji:

a) pętla for (dla instrukcji powtarzalnych określoną ilość razy)

b) pętla do..while (która wykonuje się przynajmniej jeden raz oraz kolejne razy, dopóki warunek podany w nawiasie jest spełniony)

c) pętla while (która zaczyna się wykonywać dopiero, kiedy nastąpi sprawdzenie warunku podanego w nawiasie i trwa dopóki jest o spełniony)

 

Niekiedy jednak, niezależnie od tego, czy warunek działania pętli jest spełniony potrzebna jest instrukcja przerywająca pętlę. Taką instrukcją jest właśnie BREAK. Zilustrujmy to na przykładzie:

Zadanie 2: Napisz program, który prosi użytkownika o podanie kolejnych liczb dodatnich, które później wyświetla. Wyjątek stanowi podanie przez użytkownika wartości '303', kiedy program przerywa etap podawania danych, wyświetla zdanie "Podałeś magiczną liczbę: numer polskiego dywizjonu sił powietrznych w Wielkiej Brytanii im. Tadeusza Kościuszkii. Nie musisz podawać więcej danych..."

Listing:

W linijkach 24-30 dodaliśmy instrukcję warunkową IF. która sprawdza, czy użytkownik nie podał czasem wartości 303. Z powodów praktycznych długi komunikat rozbiliśmy na kilka instrukcji System.out.print (zamiast jednej System.out.println) - aby zrzut z kodem programu nie był zbyt szeroki. Przy okazji przypomnieliśmy sobie o różnicy między tymi dwiema instrukcjami.

W linijce 29 zastosowaliśmy instrukcję BREAK, która kończy działanie pętli, w której się znajduje.

Zauważ, że instrukcja else z linijki 31 odnosi się do instrukcji (if z>0) z linijki 21. Wprowadziliśmy ją po to, aby program wyświetlał komunikat o podaniu wartości mniejszej niż zero tylko w przypadku podania takiej wartości, a nie po każdorazowym przerwaniu pętli (gdybyśmy tak nie zrobili, komunikat: "Podano wartość <= 0, koniec wprowadzania danych..." pojawiałby się także po podaniu wartości 303, co byłoby nielogiczne).

 

Wynik uruchomienia programu:

 

Dla pewności sprawdzamy, czy nadal program obsługuje "puste" macierze:

Zadanie do samodzielnego wykonania:

Zadanie 3 Zmodyfikuj powyższy program tak, aby, podobnie jak w przypadku podania wartości "303" wyświetlał adekwatne informacje po wprowadzeniu wartości 1410, 966, 1918 (odzyskanie niepodległości).

 

 


 

INSTRUKCJA CONTINUE

Instrukcja BREAK była specyficzną instrukcją, bo dawała nam możliwość ingerencji w wykonywanie pętli - konkretnie możliwość zatrzymania tej pętli.

Inną instrukcją, która umożliwia ingerencję jest instrukcja CONTINUE. Jej funkcja polega na zaprzestaniu wykonywania danego przebiegu pętli i przejściu do kolejnego przeibegu. Zilustrujmy to na przykładzie:

Zadanie 4 Zmodyfikuj powyższy program tak, aby podanie wartości '666' powodowało jej zignorowanie:

Listing:

W linijce 22 użyliśmy instrukcji continue. Jeśli warunek w nawiasie (if z==666) jest spełniony, to instrukcja continue powoduje zignorowanie instrukcji w linijkach 23-36 i ponowne wykonanie pętli (począwszy od linijki 14. Można powiedzieć, że w tym przypadku instrukcja continue powoduje przeskoczenie z linijki 22 do linijki 14.

Po uruchomieniu działanie programu jest zgodne z założeniami:

 

Zadanie do przećwiczenia:

Zadanie 5 Zmodyfikuj powyższy program tak, aby ignorował również wartości '111', '222' oraz '777'.

Zadanie 7 (dla bardzo ambitnych): Spróbuj, zarówno z wykorzystaniu instrukcji BREAK jak też instrukcji CONTINUE wykorzystać konstrukcję CASE.

Zadanie 6 (dla ambitnych). Napisz program, który prosi użytkownika o podawanie liczb parzystych. Podawanie liczb nieparzystych jest ignorowane przez program. Podanie wartości zero lub mniejszej skutkuje wyświetleniem podanych wartości i zakończeniem programu (przy użyciu break).