You are on page 1of 37

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE

Java. wiczenia
praktyczne. Wydanie II
Autor: Marcin Lis
ISBN: 83-246-0327-1
Format: B5, stron: 192

ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Rozpocznij przygod z programowaniem w Javie


Poznaj podstawowe elementy jzyka Java
Opanuj zasady programowania obiektowego
Napisz wasne aplety i aplikacje
Wykorzystaj komponenty do tworzenia interfejsw uytkownika
Java w cigu kilku ostatnich lat przebya drog od niemal nieznanej technologii
do jednego z najpopularniejszych jzykw programowania na wiecie. Dzi jej
gwnym atutem nie s aplety, ktre w zaoeniu twrcw miay umila czas
osobom odwiedzajcym witryny WWW, lecz rozbudowane aplikacje przetwarzajce
setki danych. Java to uznana platforma programistyczna stosowana zarwno przez
najwiksze firmy z brany informatycznej, jak i przez programistw amatorw
do realizacji przernych zada z wykorzystaniem technik obiektowych.
Java. wiczenia praktyczne. Wydanie II to zbir krtkich wicze, dziki ktrym
poznasz podstawy programowania w tym jzyku. Przeczytasz o gwnych elementach
Javy i technikach obiektowych. Dowiesz si, jak definiowa zmienne, przetwarza dane
tekstowe, tworzy proste aplety i bardziej zoone aplikacje. Nauczysz si korzysta
z komponentw, budujc interfejsy uytkownika swoich aplikacji i zaimplementujesz
operacje wejcia i wyjcia na plikach. Zdobdziesz solidne podstawy do dalszej
nauki Javy.
Instalacja Java Development Kit w Windows i Linuksie
Deklarowanie zmiennych
Operatory i ich priorytety
Instrukcje warunkowe i ptle
Obiekty i klasy
Wyjtki i obsuga bdw
Tworzenie apletw
Grafika i dwik w Javie
Tworzenie interfejsw uytkownika za pomoc komponentw
Operacje na plikach

Programowanie w Javie
Rozdzia 1. Krtkie wprowadzenie
Instalacja JDK
Pierwszy program
B-kod, kompilacja i maszyna wirtualna
Java a C++
Obiektowy jzyk programowania
Struktura programu

Rozdzia 2. Zmienne, operatory i instrukcje


Zmienne
Operatory
Instrukcje

Rozdzia 3. Obiekty i klasy


Metody
Konstruktory
Specyfikatory dostpu
Dziedziczenie

Rozdzia 4. Wyjtki
Bdy w programach
Instrukcja try...catch
Zgaszanie wyjtkw
Hierarchia wyjtkw

5
9
9
12
13
14
15
16

17
17
26
37

51
53
59
62
66

71
71
75
77
79

Java wiczenia praktyczne

Rozdzia 5. Rysowanie
Aplikacja a aplet
Pierwszy aplet
Jak to dziaa?
Cykl ycia apletu
Czcionki
Rysowanie grafiki
Kolory
Wywietlanie obrazw

81
81
82
84
86
86
89
95
98

Rozdzia 6. Dwiki

103

Rozdzia 7. Animacje

107

Pywajcy napis
Pywajcy napis z buforowaniem
Zegar cyfrowy
Animacja poklatkowa
Zegar analogowy

Rozdzia 8. Interakcja z uytkownikiem


Obsuga myszy
Rysowanie figur (I)
Rysowanie figur (II)
Rysowanie figur (III)

Rozdzia 9. Okna i menu


Tworzenie okna aplikacji
Budowanie menu
Wielopoziomowe menu

Rozdzia 10. Grafika i komponenty


Rysowanie elementw graficznych
Obsuga komponentw

Rozdzia 11. Operacje wejcia-wyjcia


Wczytywanie danych z klawiatury
Operacje na plikach

107
112
114
116
118

123
123
126
130
131

137
137
139
146

151
151
152

169
169
176

Zmienna jest to miejsce, w ktrym moemy przechowywa


jakie dane, np. liczby czy cigi znakw. Kada zmienna musi
mie swoj nazw, ktra j jednoznacznie identyfikuje, a take typ, ktry informuje o tym, jakiego rodzaju dane mona w niej
przechowywa. Np. zmienna typu int przechowuje liczby cakowite,
a zmienna typu float liczby zmiennoprzecinkowe. Typy w Javie dziel
si na dwa rodzaje: typy podstawowe (ang. primitive types) oraz typy
odnonikowe (ang. reference types).

Typy podstawowe
Typy podstawowe dziel si na:
q typy cakowitoliczbowe (z ang. integral types),
q typy zmiennopozycyjne (rzeczywiste, z ang. floating-point types),
q typ boolean,
q typ char.

18

Java wiczenia praktyczne

Typy cakowitoliczbowe
Rodzina typw cakowitoliczbowych skada si z czterech typw:
q byte,
q short,
q int,
q long.
W przeciwiestwie do C++ dokadnie okrelono sposb reprezentacji
tych danych. Niezalenie wic od tego, na jakim systemie pracujemy
(16-, 32- czy 64-bitowym), dokadnie wiadomo, na ilu bitach zapisana jest zmienna danego typu. Wiadomo te dokadnie, z jakiego zakresu wartoci moe ona przyjmowa, nie ma wic dowolnoci, ktra
w przypadku jzyka C moga prowadzi do sporych trudnoci przy
przenoszeniu programw pomidzy rnymi platformami. W tabeli 2.1
zaprezentowano zakresy poszczeglnych typw danych oraz liczb
bitw niezbdn do zapisania zmiennych danego typu.
Tabela 2.1. Zakresy typw arytmetycznych w Javie
Typ

Liczba bitw

Liczba bajtw

Zakres

byte

od 128 do 127

short

16

od 32 768 do 32 767

int

32

od 2 147 483 648


do 2 147 483 647

long

64

od 9 223 372 036 854 775 808


do 9 223 372 036 854 775 807

Typy zmiennoprzecinkowe
Typy zmiennoprzecinkowe wystpuj tylko w dwch odmianach:
q float (pojedynczej precyzji),
q double (podwjnej precyzji).
Zakres oraz liczb bitw i bajtw potrzebnych do zapisu tych zmiennych prezentuje tabela 2.2.

Rozdzia 2. Zmienne, operatory i instrukcje

19

Tabela 2.2. Zakresy dla typw zmiennoprzecinkowych w Javie


Typ

Liczba bitw

Liczba bajtw

Zakres

float

32

od 3,4e38 do 3,4e38

double

64

od 1,8e308 do 1,8e308

Format danych float i double jest zgodny ze specyfikacj standardu


ANSI/IEEE 754. Zapis 3,4e48 oznacza 3,4 * 1038.

Typ boolean
Jest to typ logiczny. Moe on reprezentowa jedynie dwie wartoci:
true (prawda) i false (fasz). Moe by wykorzystywany przy sprawdzaniu rnych warunkw w instrukcjach if, a take w ptlach i innych konstrukcjach programistycznych, ktre zostan przedstawione
w dalszej czci rozdziau.

Typ char
Typ char suy do reprezentacji znakw (liter, znakw przestankowych,
oglnie wszelkich znakw alfanumerycznych), przy czym w Javie
jest on 16-bitowy i zawiera znaki Unicode. Poniewa znaki reprezentowane s tak naprawd jako 16-bitowe kody liczbowe, typ ten zalicza si czasem do typw arytmetycznych.

Deklarowanie zmiennych typw podstawowych


Aby mc uy jakiej zmiennej w programie, najpierw trzeba j zadeklarowa, tzn. poda jej typ oraz nazw. Oglna deklaracja wyglda nastpujco:
typ_zmiennej nazwa_zmiennej;

Po takiej deklaracji zmienna jest ju gotowa do uycia, tzn. moemy


jej przypisywa rne wartoci bd te wykonywa na niej rne
operacje, np. dodawanie. Przypisanie wartoci zmiennej odbywa si
przy uyciu znaku (operatora) =.

20

Java wiczenia praktyczne

W I C Z E N I E

2.1.

Deklarowanie zmiennych

Zadeklaruj dwie zmienne cakowite i przypisz im dowolne wartoci.


Wyniki wywietl na ekranie (rysunek 2.1).
Rysunek 2.1.
Wynik dziaania
programu
z wiczenia 2.1

public
class Main
{
public static void main (String args[])
{
int pierwszaLiczba;
int drugaLiczba;
pierwszaLiczba = 10;
drugaLiczba = 20;
System.out.println ("pierwsza liczba: " + pierwszaLiczba);
System.out.println ("druga liczba: " + drugaLiczba);
}
}

Instrukcja System.out.println pozwala wyprowadzi cig znakw


na ekran. Warto zmiennej mona rwnie przypisa ju w trakcie
deklaracji, piszc:
typ_zmiennej nazwa_zmiennej = warto;

Mona rwnie zadeklarowa wiele zmiennych danego typu, oddzielajc ich nazwy przecinkami. Cz z nich moe by te od razu zainicjowana:
typ_zmiennej nazwa1, nazwa2, nazwa3;
typ_zmiennej nazwa1 = warto1, nazwa2, nazwa3 = warto2;

Zmienne w Javie, podobnie jak w C czy C++, ale inaczej ni w Pascalu, mona deklarowa wedle potrzeb wewntrz funkcji czy metody.

Rozdzia 2. Zmienne, operatory i instrukcje

21

W I C Z E N I E

2.2.

Jednoczesna deklaracja i inicjacja zmiennych

Zadeklaruj i jednoczenie zainicjalizuj dwie zmienne typu cakowitego. Wynik wywietl na ekranie.
public
class Main
{
public static void main (String args[])
{
int pierwszaLiczba = 10;
int drugaLiczba = 20;
System.out.println ("pierwsza liczba: " + pierwszaLiczba);
System.out.println ("druga liczba: " + drugaLiczba);
}
}
W I C Z E N I E

2.3.

Deklarowanie zmiennych w jednym wierszu

Zadeklaruj kilka zmiennych typu cakowitego w jednym wierszu.


Kilka z nich zainicjuj.
public
class Main
{
public static void main (String args[])
{
int pierwszaLiczba = 10, drugaLiczba = 20, i, j, k;
System.out.println ("pierwsza liczba: " + pierwszaLiczba);
System.out.println ("druga liczba: " + drugaLiczba);
}
}

Przy nazywaniu zmiennych obowizuj pewne zasady. Ot nazwa


moe si skada z wielkich i maych liter oraz cyfr, ale nie moe si
zaczyna od cyfry. Cho nie jest to zabronione, raczej unika si stosowania polskich znakw diakrytycznych. Nazwa zmiennej powinna
take odzwierciedla funkcj penion w programie. Jeeli na przykad okrela ona liczb punktw w jakim zbiorze, to najlepiej nazwa j liczbaPunktow lub nawet liczbaPunktowWZbiorze. Mimo e
tak duga nazwa moe wydawa si dziwna, jednak bardzo poprawia
czytelno programu oraz uatwia jego analiz. Naprawd warto ten
sposb stosowa. Przyjmuje si te, co rwnie jest bardzo wygodne,
e nazw zmiennej rozpoczynamy ma liter, a poszczeglne czony

22

Java wiczenia praktyczne

tej nazwy (wyrazy, ktre si na ni skadaj) rozpoczynamy wielk


liter dokadnie tak jak w powyszych przykadach.

Typy odnonikowe
Typy odnonikowe (ang. reference types) moemy podzieli na dwa
umowne rodzaje:
q typy klasowe (ang. class types)1,
q typy tablicowe (ang. array types).
Zacznijmy od typw tablicowych. Tablice s to wektory elementw
danego typu i su do uporzdkowanego przechowywania wartoci
tego typu. Mog by jedno- bd wielowymiarowe. Dostp do danego
elementu tablicy jest realizowany poprzez podanie jego indeksu,
czyli miejsca w tablicy, w ktrym si on znajduje. Dla tablicy jednowymiarowej bdzie to po prostu kolejny numer elementu, dla tablicy
dwuwymiarowej trzeba ju poda numer wiersza i kolumny itd. Jeli
chcemy zatem przechowa w programie 10 liczb cakowitych, najwygodniej bdzie uy w tym celu 10-elementowej tablicy typu int.
Typy klasowe pozwalaj na tworzenie klas i deklarowanie zmiennych
obiektowych. Zajmiemy si nimi w rozdziale 3.

Deklarowanie zmiennych typw odnonikowych


Zmienne typw odnonikowych deklarujemy podobnie jak w przypadku zmiennych typw podstawowych, tzn. piszc:
typ_zmiennej nazwa_zmiennej;

lub:
typ_zmiennej nazwa_zmiennej_1, nazwa_zmiennej_2, nazwa_zmiennej_3;

Stosujc taki zapis, inaczej ni w przypadku typw prostych, zadeklarowalimy jednak jedynie tzw. odniesienie (ang. reference) do obiektu, a nie sam byt, jakim jest obiekt! Takiemu odniesieniu domylnie
1

Typy klasowe moglibymy podzieli z kolei na obiektowe i interfejsowe;


s to jednak rozwaania, ktrymi nie bdziemy si w niniejszej publikacji
zajmowa.

Rozdzia 2. Zmienne, operatory i instrukcje

23

przypisana jest warto pusta (null), czyli praktycznie nie moemy


wykonywa na nim adnej operacji. Dopiero po utworzeniu odpowiedniego obiektu w pamici moemy powiza go z tak zadeklarowan zmienn. Jeli zatem napiszemy np.:
int a;

bdziemy mieli gotow do uycia zmienn typu cakowitego. Moemy jej przypisa np. warto 10. eby jednak mc skorzysta z tablicy, musimy zadeklarowa zmienn odnonikow typu tablicowego,
utworzy obiekt tablicy i powiza go ze zmienn. Dopiero wtedy
bdziemy mogli swobodnie odwoywa si do kolejnych elementw.
Piszc zatem:
int tablica[];

zadeklarujemy odniesienie do tablicy, ktra bdzie moga zawiera


elementy typu int, czyli 32-bitowe liczby cakowite. Samej tablicy
jednak jeszcze wcale nie ma. Przekonamy si o tym, wykonujc kolejne wiczenia.
W I C Z E N I E

2.4.

Deklarowanie tablicy

Zadeklaruj tablic elementw typu cakowitego. Przypisz zerowemu


elementowi tablicy dowoln warto. Sprbuj skompilowa i uruchomi program.
public
class Main
{
public static void main (String args[])
{
int tablica[];
tablica[0] = 11;
System.out.println ("Zerowy element tablicy to: " + tablica[0]);
}
}

Ju przy prbie kompilacji kompilator wypisze na ekranie tekst: Variable tablica might not have been initialized, informujcy nas,
e chcemy odwoa si do zmiennej, ktra prawdopodobnie nie zostaa zainicjalizowana (rysunek 2.2). Widzimy te wyranie, e w razie wystpienia bdu na etapie kompilacji otrzymujemy kilka wanych i pomocnych informacji. Przede wszystkim jest to nazwa pliku,
w ktrym wystpi bd (jest to wane, gdy program moe skada
si z bardzo wielu klas, a kada z nich jest zazwyczaj definiowana
w oddzielnym pliku), numer wiersza w tym pliku oraz konkretne

24

Java wiczenia praktyczne

miejsce wystpienia bdu. Na samym kocu kompilator podaje te


cakowit liczb bdw.

Rysunek 2.2. Bd kompilacji. Nie zainicjowalimy zmiennej tablica

Skoro jednak wystpi bd, naley go natychmiast naprawi.


W I C Z E N I E

2.5.

Deklaracja i utworzenie tablicy

Zadeklaruj i utwrz tablic elementw typu cakowitego. Przypisz


zerowemu elementowi tablicy dowoln warto. Sprbuj wywietli
zawarto tego elementu na ekranie.
public
class Main
{
public static void main (String args[])
{
int tablica[] = new int[10];
tablica[0] = 11;
System.out.println ("Zerowy element tablicy to: " + tablica[0]);
}
}

Wyraenie new tablica[10] oznacza utworzenie nowej, jednowymiarowej tablicy liczb typu int o rozmiarze 10 elementw. Ta nowa
tablica zostaa przypisana zmiennej odnonikowej o nazwie tablica.
Po takim przypisaniu moemy odwoywa si do kolejnych elementw
tej tablicy, piszc:
tablica[index]

Warto przy tym zauway, e elementy tablicy numerowane s od zera,


a nie od 1. Oznacza to, e pierwszy element tablicy 10-elementowej
ma indeks 0, a ostatni 9 (a nie 10!).
Co si jednak stanie, jeli nieprzyzwyczajeni do takiego sposobu
indeksowania odwoamy si do indeksu o numerze 10?

Rozdzia 2. Zmienne, operatory i instrukcje

25

W I C Z E N I E

2.6.

Odwoanie do nieistniejcego indeksu

Zadeklaruj i zainicjalizuj tablic dziesicioelementow. Sprbuj przypisa elementowi o indeksie 10 dowoln liczb cakowit.
public
class Main
{
public static void main (String args[])
{
int tablica[] = new int[10];
tablica[10] = 11;
System.out.println ("Dziesity element tablicy to: "
+ tablica[10]);
}
}

Efekt dziaania kodu jest widoczny na rysunku 2.3. Wbrew pozorom


nie stao si jednak nic strasznego. Wystpi bd, zosta on jednak
obsuony przez maszyn wirtualn Javy. Konkretnie zosta wygenerowany tzw. wyjtek i program standardowo zakoczy dziaanie.
Taki wyjtek moemy jednak przechwyci i tym samym zapobiec
niekontrolowanemu zakoczeniu aplikacji. Jest to jednak odrbny,
aczkolwiek bardzo wany temat; zajmiemy si nim wic nieco pniej. Godne uwagi jest to, e prba odwoania si do nieistniejcego
elementu zostaa wykryta i to odwoanie tak naprawd nie wystpio!
Program nie naruszy wic niezarezerwowanego dla niego obszaru
pamici.

Rysunek 2.3. Prba odwoania si do nieistniejcego elementu tablicy

26

Java wiczenia praktyczne

Poznalimy ju zmienne, musimy jednak wiedzie, jakie operacje moemy na nich wykonywa. Operacje wykonujemy za pomoc rnych
operatorw, np. odejmowania, dodawania, przypisania itd. Operatory te
moemy podzieli na nastpujce grupy2:
q arytmetyczne,
q bitowe,
q logiczne,
q przypisania,
q porwnania.

Operatory arytmetyczne
Wrd tych operatorw znajdziemy standardowo dziaajce:
q + dodawanie,
q odejmowanie,
q * mnoenie,
q / dzielenie.
W I C Z E N I E

2.7.

Operacje arytmetyczne na zmiennych

Zadeklaruj dwie zmienne typu cakowitego. Wykonaj na nich kilka


operacji arytmetycznych. Wyniki wywietl na ekranie.
public
class Main
{
public static void main(String args[])
{
int a, b, c;
a = 10;
b = 25;
c = b - a;
System.out.println("a = " + a);

Mona wydzieli rwnie inne grupy, co wykracza jednak poza ramy


tematyczne niniejszej publikacji.

Rozdzia 2. Zmienne, operatory i instrukcje

27

System.out.println("b = " + b);


System.out.println("b - a = " + c);
c = a * b;
System.out.println("a * b = " + c);
}
}

Do operatorw arytmetycznych naley rwnie znak %, przy czym


nie oznacza on obliczania procentw, ale dzielenie modulo (reszt
z dzielenia). Np. wynik dziaania 12 % 5 wynosi 2, pitka mieci
si bowiem w dwunastu 2 razy, pozostawiajc reszt 2 (5 * 2 = 10,
10 + 2 = 12).
W I C Z E N I E

2.8.

Dzielenie modulo

Zadeklaruj kilka zmiennych. Wykonaj na nich operacje dzielenia


modulo. Wyniki wywietl na ekranie.
public
class Main
{
public static void main(String args[])
{
int a, b, c;
a = 10;
b = 25;
c = b % a;
System.out.println("b % a = " + c);
System.out.println("a % 3 = " + a % 3);
c = a * b;
System.out.println("(a * b) % 120 = " + c % 120);
}
}

Kolejne operatory typu arytmetycznego to operator inkrementacji


i dekrementacji. Operator inkrementacji (czyli zwikszenia), ktrego
symbolem jest ++, powoduje przyrost wartoci zmiennej o jeden. Moe
wystpowa w formie przyrostkowej bd przedrostkowej. Oznacza to,
e jeli mamy zmienn, ktra nazywa si np. x, forma przedrostkowa
bdzie wyglda: ++x, natomiast przyrostkowa: x++.
Oba te wyraenia zwiksz warto zmiennej x o jeden, jednak nie s
one rwnowane. Ot operacja x++ zwiksza warto zmiennej po
jej wykorzystaniu, natomiast ++x przed jej wykorzystaniem. Czasem
takie rozrnienie jest bardzo pomocne przy pisaniu programu.

28

Java wiczenia praktyczne

W I C Z E N I E

2.9.

Operator inkrementacji

Przeanalizuj poniszy kod. Nie uruchamiaj programu, ale zastanw


si, jaki bdzie wywietlony cig liczb. Nastpnie, po uruchomieniu
kodu, sprawd swoje przypuszczenia.
public
class Main
{
public static void main (String args[])
{
/*1*/ int x = 1, y;
/*2*/ System.out.println (++x);
/*3*/ System.out.println (x++);
/*4*/ System.out.println (x);
/*5*/ y = x++;
/*6*/ System.out.println (y);
/*7*/ y = ++x;
/*8*/ System.out.println (++y);
}
}

Dla uatwienia poszczeglne wiersze w programie zostay oznaczone


kolejnymi liczbami. Wynikiem dziaania tego programu bdzie cig
liczb: 2, 2, 3, 3, 6. Dlaczego? Na pocztku zmienna x przyjmuje warto 1. W 2. wierszu wystpuje operator ++x, zatem najpierw jest ona
zwikszana o jeden (x = 2), a dopiero potem wywietlana na ekranie.
W wierszu o numerze 3 jest odwrotnie. Najpierw warto zmiennej x
jest wywietlana (x = 2), a dopiero potem zwikszana o 1 (x = 3).
W wierszu 4. po prostu wywietlamy warto x (x = 3). W wierszu 5.
najpierw zmiennej y jest przypisywana dotychczasowa warto x (x = 3,
y = 3), a nastpnie warto x jest zwikszana o jeden (x = 4). W wierszu 6. wywietlamy warto y (y = 3). W wierszu 7. najpierw zwikszamy warto x o jeden (x = 5), a nastpnie przypisujemy t warto zmiennej y. W wierszu ostatnim, smym, zwikszamy y o jeden
(y = 6) i wywietlamy na ekranie.
Operator dekrementacji (--) dziaa analogicznie, z tym e zamiast zwiksza wartoci zmiennych zmniejsza je, oczywicie zawsze o jeden.
W I C Z E N I E

2.10.

Operator dekrementacji

Zmie kod z wiczenia 2.9 tak, aby operator ++ zosta zastpiony


operatorem --. Nastpnie przeanalizuj jego dziaanie i sprawd, czy

Rozdzia 2. Zmienne, operatory i instrukcje

29

otrzymany wynik jest taki sam, jak otrzymany na ekranie po uruchomieniu kodu.
public
class Main
{
public static void main (String args[])
{
/*1*/ int x = 1, y;
/*2*/ System.out.println (--x);
/*3*/ System.out.println (x--);
/*4*/ System.out.println (x);
/*5*/ y = x--;
/*6*/ System.out.println (y);
/*7*/ y = --x;
/*8*/ System.out.println (--y);
}
}

Dziaania operatorw arytmetycznych na liczbach cakowitych nie


trzeba chyba wyjania, z dwoma moe wyjtkami. Ot co si stanie, jeeli wynik dzielenia dwch liczb cakowitych nie bdzie liczb
cakowit? Odpowied na szczcie jest prosta, wynik zostanie zaokrglony w d. Zatem wynikiem dziaania 7/2 w arytmetyce liczb
cakowitych bdzie 3 (prawdziwym wynikiem jest oczywicie 3,5,
ktra to warto zostaje zaokrglona w d do najbliszej liczby cakowitej, czyli trzech).
W I C Z E N I E

2.11.

Dzielenie liczb cakowitych

Wykonaj dzielenie zmiennych typu cakowitego. Sprawd rezultaty


w sytuacji, gdy rzeczywisty wynik jest uamkiem.
public
class Main
{
public static void main(String args[])
{
int a, b, c;
a = 8;
b = 3;
c = 2;
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
System.out.println("a / b = " + a / b);
System.out.println("a / c = " + a / c);
System.out.println("b / c = " + b / c);
}
}

30

Java wiczenia praktyczne

Drugim problemem jest to, co si stanie, jeeli przekroczymy zakres


jakiej zmiennej. Pamitamy np., e zmienna typu byte jest zapisywana na 8 bitach i moe przyjmowa wartoci od 128 do 127 (patrz
tabela 2.1). Sprbujmy zatem przypisa zmiennej tego typu warto
128. Szybko przekonamy si, e kompilator do tego nie dopuci (rysunek 2.4).
Rysunek 2.4.
Prba przekroczenia
dopuszczalnej
wartoci zmiennej

W I C Z E N I E

2.12.

Przekroczenie zakresu w trakcie kompilacji

Zadeklaruj zmienn typu byte. Przypisz jej warto 128. Sprbuj dokona kompilacji otrzymanego kodu.
public
class Main
{
public static void main (String args[])
{
byte zmienna;
zmienna = 128;
System.out.println(zmienna);
}
}

Niestety, kompilator nie zawsze bdzie w stanie wykry tego typu


bd. Moe si bowiem zdarzy, e zakres przekroczymy w trakcie
wykonywania programu. Co wtedy?
W I C Z E N I E

2.13.

Przekroczenie zakresu w trakcie dziaania kodu

Zadeklaruj zmienne typu long. Wykonaj operacje arytmetyczne przekraczajce dopuszczaln warto takiej zmiennej. Wynik wywietl na
ekranie.

Rozdzia 2. Zmienne, operatory i instrukcje

31

public
class Main
{
public static void main (String args[])
{
long a, b = (long) Math.pow(2, 63) + 1;
a = b + b;
System.out.println ("a = " + a);
}
}

Operacja (long) Math.pow(2, 63) oznacza podniesienie liczby 2 do


potgi 63., a nastpnie skonwertowanie wyniku (ktry jest liczb typu double) do typu long. Zmiennej a jest przypisywany wynik dziaania b + b i okazuje si, e jest to 0. Dlaczego? Ot jeeli jaka warto przekracza dopuszczalny zakres swojego typu, jest zawijana do
pocztku tego zakresu. Obrazowo ilustruje to rysunek 2.5.

Rysunek 2.5. Przekroczenie dopuszczalnego zakresu dla typu int

Operatory bitowe
Operacje te, jak sama nazwa wskazuje, dokonywane s na bitach.
Przypomnijmy zatem podstawowe wiadomoci o systemach liczbowych. W systemie dziesitnym, z ktrego korzystamy na co dzie,
wykorzystywanych jest dziesi cyfr od 0 do 9. W systemie dwjkowym bd zatem wykorzystywane jedynie dwie cyfry 0 i 1.
Kolejne liczby budowane s z tych dwch cyfr, dokadnie tak samo
jak w systemie dziesitnym; przedstawia to tabela 2.3. Wida wyranie, e np. 4 dziesitnie to 100 dwjkowo, a 10 dziesitnie to 1010
dwjkowo.

32

Java wiczenia praktyczne

Tabela 2.3. Reprezentacja liczb w systemie dwjkowym i dziesitnym


System dwjkowy

System dziesitny

10

11

100

101

110

111

1000

1001

1010

10

1011

11

1100

12

1101

13

1110

14

1111

15

Na tak zdefiniowanych liczbach moemy dokonywa znanych ze szkoy


operacji bitowych AND (iloczyn bitowy), OR (suma bitowa) oraz XOR
(bitowa alternatywa wykluczajca). Symbolem operatora AND jest znak
& (ampersand), operatora OR znak | (pionowa kreska), natomiast
operatora XOR znak ^ (strzaka w gr). Oprcz tego mona rwnie
wykonywa operacje przesuni bitw. Zestawienie wystpujcych
w Javie operatorw bitowych zostao przedstawione w tabeli 2.4.

Operatory logiczne
Argumentami operacji takiego typu musz by wyraenia posiadajce
warto logiczn, czyli true lub false (prawda i fasz). Przykadowo,
wyraenie 10 < 20 jest niewtpliwie prawdziwe (10 jest mniejsze od 20),

Rozdzia 2. Zmienne, operatory i instrukcje

33

Tabela 2.4. Operatory bitowe w Javie


Operator

Symbol

AND

&

OR

NOT

XOR

Przesunicie bitowe w prawo

>>

Przesunicie bitowe w lewo

<<

Przesunicie bitowe w prawo z wypenieniem zerami

>>>

zatem jego warto logiczna jest rwna true. W grupie tej wyrniamy trzy operatory:
q logiczne AND (&&),
q logiczne OR (||),
q logiczna negacja (!).
Warto zauway, e w czci przypadkw stosowania operacji logicznych, aby otrzyma wynik, wystarczy obliczy tylko pierwszy argument. Wynika to, oczywicie, z waciwoci operatorw. Jeli bowiem
wynikiem obliczenia pierwszego argumentu jest warto true, a wykonujemy operacj OR, to niezalenie od stanu drugiego argumentu
wartoci caego wyraenia bdzie true. Podobnie przy stosowaniu
operatora AND jeeli wartoci pierwszego argumentu bdzie false,
to i wartoci caego wyraenia bdzie false.

Operatory przypisania
Operacje przypisania s dwuargumentowe i powoduj przypisanie
wartoci argumentu znajdujcego si z prawej strony do argumentu
znajdujcego si z lewej strony. Najprostszym operatorem tego typu
jest oczywicie klasyczny znak rwnoci. Zapis liczba = 5 oznacza,
e zmiennej liczba chcemy przypisa warto 5. Oprcz tego mamy
jeszcze do dyspozycji operatory czce klasyczne przypisanie z innym operatorem arytmetycznym bd bitowym. Zostay one zebrane
w tabeli 2.5.

34

Java wiczenia praktyczne

Tabela 2.5. Operatory przypisania i ich znaczenie w Javie


Argument 1

Operator

Argument 2

Znaczenie

x = y

+=

x = x + y

-=

x = x y

*=

x = x * y

/=

x = x / y

%=

x = x % y

<<=

x = x << y

>>=

x = x >> y

>>>=

x = x >>> y

&=

x = x & y

|=

x = x | y

^=

x = x ^ y

Operatory porwnania (relacyjne)


Operatory porwnania, czyli relacyjne, su oczywicie do porwnywania argumentw. Wynikiem takiego porwnania jest warto
logiczna true (jeli jest ono prawdziwe) lub false (jeli jest faszywe). Zatem wynikiem operacji argument1 == argument2 bdzie true,
jeeli argumenty s sobie rwne, lub false, jeeli argumenty s rne.
Czyli 4 == 5 ma warto false, a 2 == 2 ma warto true. Do dyspozycji mamy operatory porwnania zawarte w tabeli 2.6.

Operator warunkowy
Operator warunkowy ma nastpujc skadni:
warunek ? warto1 : warto2;

Wyraenie takie przybiera warto1, jeeli warunek jest prawdziwy,


lub warto2 w przeciwnym przypadku.

Rozdzia 2. Zmienne, operatory i instrukcje

35

Tabela 2.6. Operatory porwnania w Javie


Operator

Opis

==

jeli argumenty s sobie rwne, wynikiem jest true

!=

jeli argumenty s rne, wynikiem jest true

>

jeli argument prawostronny jest mniejszy od lewostronnego,


wynikiem jest true

<

jeli argument prawostronny jest wikszy od lewostronnego,


wynikiem jest true

>=

jeli argument prawostronny jest mniejszy lub rwny


lewostronnemu, wynikiem jest true

<=

jeli argument prawostronny jest wikszy lub rwny


lewostronnemu, wynikiem jest true

W I C Z E N I E

2.14.

Wykorzystanie operatora warunkowego

Wykorzystaj operator warunkowy do zmodyfikowania wartoci dowolnej zmiennej typu cakowitego (int).
public
class Main
{
public static void main (String args[])
{
int x = 1, y;
y = (x == 1 ? 10 : 20);
System.out.println ("y = " + y);
}
}

W powyszym wiczeniu najwaniejszy jest oczywicie wiersz:


y = (x == 1? 10 : 20);

ktry oznacza: jeeli x jest rwne 1, przypisz zmiennej y warto 10,


w przeciwnym przypadku przypisz zmiennej y warto 20. Poniewa
zmienn x zainicjalizowalimy wartoci 1, na ekranie zostanie wywietlony cig znakw y = 10.

36

Java wiczenia praktyczne

Priorytety operatorw
Sama znajomo operatorw to jednak nie wszystko. Niezbdna jest
jeszcze wiedza na temat tego, jaki maj one priorytet, czyli jaka jest
kolejno ich wykonywania. Wiadomo na przykad, e mnoenie jest
silniejsze od dodawania, zatem najpierw mnoymy, potem dodajemy. W Javie jest podobnie, sia kadego operatora jest cile okrelona. Przedstawia to tabela 2.73. Im wysza pozycja w tabeli, tym
wyszy priorytet operatora. Operatory znajdujce si na jednym poziomie (w jednym wierszu) maj ten sam priorytet.
Tabela 2.7. Priorytety operatorw w Javie

Grupa operatorw

Symbole

inkrementacja przyrostkowa

++, --

inkrementacja przedrostkowa, negacje

++, --, ~, !

mnoenie, dzielenie

*, /, %

przesunicia bitowe

<<, >>, >>>

porwnania

<, >, <=, >=

porwnania

==, !=

bitowe AND

&

bitowe XOR

bitowe OR

logiczne AND

&&

logiczne OR

||

warunkowe

przypisania

=, +=, -=, *=, /=, %=, >>=, <<=,


>>>=, &=, ^=, |=

Tabela nie przedstawia wszystkich operatorw wystpujcych w Javie,


a jedynie omawiane w ksice.

Rozdzia 2. Zmienne, operatory i instrukcje

37

Instrukcja warunkowa if...else


Bardzo czsto w programie zachodzi potrzeba sprawdzenia jakiego
warunku i w zalenoci od tego, czy jest on prawdziwy, czy faszywy,
wykonanie rnych instrukcji. Do takiego sprawdzania suy wanie
instrukcja warunkowa if...else. Ma ona ogln posta:
if (wyraenie warunkowe){
//instrukcje do wykonania, jeeli warunek jest prawdziwy
}
else{
//instrukcje do wykonania, jeeli warunek jest faszywy
}

wyraenie warunkowe, inaczej ni w C i C++, musi da w wyniku


warto typu boolean, tzn. true lub false.
W I C Z E N I E

2.15.

Uycie instrukcji warunkowej if...else

Wykorzystaj instrukcj warunkow if...else do stwierdzenia, czy


warto zmiennej typu cakowitego jest mniejsza od zera.
public
class Main
{
public static void main (String args[])
{
int a = -10;
if (a > 0){
System.out.println ("Zmienna a jest wiksza od zera");
}
else{
System.out.println ("Zmienna a nie jest wiksza od zera");
}
}
}

Sprbujmy teraz czego nieco bardziej skomplikowanego. Zajmijmy


si klasycznym przykadem liczenia pierwiastkw rwnania kwadratowego. Przypomnijmy, e jeli mamy rwnanie o postaci A * x2 + B * x
+ C = 0, to aby obliczy jego rozwizanie liczymy tzw. delt (D),
ktra jest rwna B2 4 * A * C. Jeeli delta jest wiksza od zera, mamy
dwa pierwiastki: x1 = (B + D ) / (2 * A) i x2 = (B D ) / (2 * A).

38

Java wiczenia praktyczne

Jeeli delta jest rwna zero, istnieje tylko jedno rozwizanie mianowicie x = B / (2 * A). W przypadku trzecim, jeeli delta jest
mniejsza od zera, rwnanie takie nie ma rozwiza w zbiorze liczb
rzeczywistych.
Skoro jest tutaj tyle warunkw do sprawdzenia, to jest to doskonay
przykad do potrenowania zastosowania instrukcji if...else. Aby
nie komplikowa zagadnienia, nie bdziemy si w tej chwili zajmowa wczytywaniem parametrw rwnania z klawiatury, ale podamy
je bezporednio w kodzie.
W I C Z E N I E

2.16.

Pierwiastki rwnania kwadratowego

Wykorzystaj operacje arytmetyczne oraz instrukcj if...else do obliczenia pierwiastkw rwnania kwadratowego o parametrach podanych bezporednio w kodzie programu.
public
class Main
{
public static void main (String args[])
{
int parametrA = 1, parametrB = -1, parametrC = -6;
System.out.println ("Parametry rwnania:\n");
System.out.println ("A: " + parametrA + " B: " + parametrB + " C: "
+ parametrC + "\n");
if (parametrA == 0){
System.out.println ("To nie jest rwnanie kwadratowe: A = 0!");
}
else{
double delta = parametrB * parametrB - 4 * parametrA * parametrC;
if (delta < 0){
System.out.println ("Delta < 0.");
System.out.println ("To rwnanie nie ma rozwizania w zbiorze
liczb rzeczywistych");
}
else{
double wynik;
if (delta == 0){
wynik = - parametrB / 2 * parametrA;
System.out.println ("Rozwizanie: x = " + wynik);
}
else{
wynik = (- parametrB + Math.sqrt(delta)) / 2 * parametrA;
System.out.print ("Rozwizanie: x1 = " + wynik);
wynik = (- parametrB - Math.sqrt(delta)) / 2 * parametrA;
System.out.println (", x2 = " + wynik);
}

Rozdzia 2. Zmienne, operatory i instrukcje

39

}
}
}
}

Jak atwo zauway, instrukcj warunkow mona zagnieda, tzn.


po jednym if moe wystpowa kolejne, po nim nastpne itd. Jednak jeeli zapiszemy to w sposb podany w poprzednim wiczeniu,
przy wielu zagniedeniach otrzymamy bardzo nieczytelny kod.
Moemy wic posuy si konstrukcj if...else if. Zamiast tworzy mniej wygodn konstrukcj, tak jak przedstawiona poniej:
if (warunek1){
//instrukcje 1
}
else{
if (warunek2){
//instrukcje 2
}
else{
if (warunek3){
//instrukcje 3
}
else{
//instrukcje 4
}
}
}

cao moemy zapisa duo prociej i czytelniej w postaci:


if (warunek1){
//instrukcje 1
}
else if (warunek2){
//instrukcje 2
}
else if (warunek3){
//instrukcje 3
}
else{
//instrukcje 4
}
W I C Z E N I E

2.17.

Zastosowanie instrukcji if...else if

Napisz kod obliczajcy pierwiastki rwnania kwadratowego o parametrach zadanych w programie. Wykorzystaj instrukcj if...else if.
public
class Main
{
public static void main (String args[])

40

Java wiczenia praktyczne


{
int parametrA = 1, parametrB = -1, parametrC = -6;
System.out.println ("Parametry rwnania:\n");
System.out.println ("A: " + parametrA + " B: " + parametrB + " C: "
+ parametrC + "\n");
if (parametrA == 0){
System.out.println ("To nie jest rwnanie kwadratowe: A = 0!");
}
else{
double delta = parametrB * parametrB - 4 * parametrA * parametrC;
double wynik;
if (delta < 0){
System.out.println ("Delta < 0.");
System.out.println ("To rwnanie nie ma rozwizania w zbiorze
liczb rzeczywistych");
}
else if (delta == 0){
wynik = - parametrB / 2 * parametrA;
System.out.println ("Rozwizanie: x = " + wynik);
}
else{
wynik = (- parametrB + Math.sqrt(delta)) / 2 * parametrA;
System.out.print ("Rozwizanie: x1 = " + wynik);
wynik = (- parametrB - Math.sqrt(delta)) / 2 * parametrA;
System.out.println (" x2 = " + wynik);
}
}
}
}

Instrukcja wyboru switch


Instrukcja switch pozwala w wygodny i przejrzysty sposb sprawdza cig warunkw i wykonywa rny kod w zalenoci od tego,
czy s one prawdziwe, czy faszywe. Mona ni zastpi cig instrukcji if...else if. Jeeli mamy w kodzie przykadow konstrukcj w postaci:
if (a == 1){
instrukcje1;
}
else if (a == 50){
instrukcje2;
}
else if (a == 23){
instrukcje3;
}
else{
instrukcje4;
}

Rozdzia 2. Zmienne, operatory i instrukcje

41

to moemy zastpi j nastpujco:


switch (a){
case 1:
instrukcje1;
break;
case 50:
instrukcje2;
break;
case 23:
instrukcje3;
break;
default:
instrukcje4;
}

Po kolei jest tu sprawdzane, czy a jest rwne 1, potem 50 i w kocu 23.


Jeeli rwno zostanie w jednym z przypadkw stwierdzona, wykonywane s instrukcje po odpowiedniej klauzuli case. Jeeli a nie jest
rwne adnej z wymienionych liczb, wykonywane s instrukcje po
sowie default. Instrukcja break powoduje wyjcie z bloku switch.
W I C Z E N I E

2.18.

Uycie instrukcji wyboru switch

Uywajc instrukcji switch, napisz program sprawdzajcy, czy warto zadeklarowanej zmiennej jest rwna 1, czy 10. Wywietl na ekranie stosowny komunikat.
public
class Main
{
public static void main (String args[])
{
int a = 10;
switch (a){
case 1 :
System.out.println("a = 1");
break;
case 10:
System.out.println("a = 10");
break;
default:
System.out.println("a nie jest rwne ani 1, ani 10.");
}
}
}

Uwaga! Jeeli zapomnimy o sowie break, wykonywanie instrukcji


switch bdzie kontynuowane, co moe prowadzi do otrzymania
niespodziewanych efektw. W szczeglnoci zostanie wtedy wykonany

42

Java wiczenia praktyczne

blok instrukcji wystpujcy po default. Moe to by, oczywicie,


efektem zamierzonym, moe te jednak powodowa trudne do wykrycia bdy.
W I C Z E N I E

2.19.

Efekt pominicia instrukcji break

Zmodyfikuj kod z wiczenia 2.18, usuwajc instrukcj break. Zaobserwuj, jak zmienio si dziaanie programu.
public
class Main
{
public static void main (String args[])
{
int a = 10;
switch (a){
case 1:
System.out.println("a = 1");
case 10:
System.out.println("a = 10");
default:
System.out.println("a nie jest rwne ani 1, ani 10");
}
}
}

Wida wyranie (rysunek 2.5), e teraz wedug naszego programu


zmienna a jest jednoczenie rwna 10, jak i rna od dziesiciu.
Rysunek 2.5.
Ilustracja bdu
z wiczenia 2.19

Ptla for
Ptle w jzykach programowania pozwalaj na wykonywanie powtarzajcych si czynnoci. Nie inaczej jest w Javie. Jeli chcemy np.
wypisa na ekranie 10 razy napis Java, to moemy zrobi to, piszc

Rozdzia 2. Zmienne, operatory i instrukcje

43

10 razy System.out.println("Java");. Jeeli jednak chcielibymy


mie ju 150 takich napisw, to, pomijajc oczywicie sensowno
tej czynnoci, byby to ju problem. Na szczcie z pomoc przychodz nam wanie ptle. Ptla typu for ma nastpujc skadni:
for (wyraenie pocztkowe; wyraenie warunkowe; wyraenie
modyfikujce){
//instrukcje do wykonania
}

wyraenie pocztkowe jest stosowane do zainicjalizowania zmiennej


uywanej jako licznik liczby wykona ptli. wyraenie warunkowe
okrela warunek, jaki musi by speniony, aby dokona kolejnego
przejcia w ptli, wyraenie modyfikujce jest zwykle uywane do
modyfikacji zmiennej bdcej licznikiem.
W I C Z E N I E

2.20.

Budowa ptli for

Wykorzystujc ptl typu for, napisz program wywietlajcy na ekranie 10 razy napis Java.
public
class Main
{
public static void main (String args[])
{
for (int i = 1; i <= 10; i++){
System.out.println ("Java");
}
}
}

Zmienna i to tzw. zmienna iteracyjna, ktrej na pocztku przypisujemy warto 1 (int i = 1). Nastpnie w kadym przebiegu ptli jest
ona zwikszana o jeden (i++) oraz wykonywana jest instrukcja System.out.println ("Java");. Wszystko trwa tak dugo, a i osignie
warto 10 (i <= 10).
Wyraenie modyfikujce jest zwykle uywane do modyfikacji zmiennej iteracyjnej. Takiej modyfikacji moemy jednak dokona rwnie
wewntrz ptli. Struktura tego typu wyglda nastpujco:
for (wyraenie pocztkowe; wyraenie warunkowe;){
instrukcje do wykonania
wyraenie modyfikujce
}

44

Java wiczenia praktyczne

W I C Z E N I E

2.21.

Wyraenie modyfikujce w bloku instrukcji

Zmodyfikuj ptl typu for z wiczenia 2.20 tak, aby wyraenie modyfikujce znalazo si w bloku instrukcji.
public
class Main
{
public static void main (String args[])
{
for (int i = 1; i <= 10;){
System.out.println ("Java");
i++;
}
}
}

Zwrmy uwag, e mimo i wyraenie modyfikujce jest teraz wewntrz ptli, rednik znajdujcy si po i <= 10 jest niezbdny! Jeli
o nim zapomnimy, kompilator zgosi bd.
Kolejn ciekaw moliwoci jest poczenie wyraenia warunkowego
i modyfikujcego.
W I C Z E N I E

2.22.

czenie wyraenia warunkowego i modyfikujcego

Napisz tak ptl typu for, aby wyraenie warunkowe byo jednoczenie wyraeniem modyfikujcym.
public
class Main
{
public static void main (String args[])
{
for (int i = 1; i++ <= 10;){
System.out.println ("Java");
}
}
}

W podobny sposb jak w poprzednich przykadach moemy si pozby wyraenia pocztkowego, ktre przeniesiemy przed ptl. Schemat wyglda nastpujco:
wyraenie pocztkowe;
for (; wyraenie warunkowe;){
instrukcje do wykonania
wyraenie modyfikujce
}

Rozdzia 2. Zmienne, operatory i instrukcje

45

W I C Z E N I E

2.23.

Wyraenie pocztkowe przed ptl

Zmodyfikuj ptl typu for w taki sposb, aby wyraenie pocztkowe


znalazo si przed ptl, a wyraenie modyfikujce wewntrz niej.
public
class Main
{
public static void main (String args[])
{
int i = 1;
for (; i <= 10;){
System.out.println ("Java");
i++;
}
}
}

Skoro zaszlimy ju tak daleko w pozbywaniu si wyrae sterujcych, usumy rwnie wyraenie warunkowe. Jest to jak najbardziej
moliwe!
W I C Z E N I E

2.24.

Ptla bez wyrae

Zmodyfikuj ptl typu for w taki sposb, aby wyraenie pocztkowe


znalazo si przed ptl, natomiast wyraenie modyfikujce i warunkowe wewntrz ptli.
public
class Main
{
public static void main (String args[])
{
int i = 1;
for ( ; ; ){
System.out.println ("Java");
if (i++ >= 10) break;
}
}
}

Przy stosowaniu tego typu konstrukcji pamitajmy, e oba redniki


w nawiasach okrgych wystpujcych po for s niezbdne do prawidowego funkcjonowania kodu. Warto te zwrci uwag na zmian
kierunku nierwnoci. We wczeniejszych przykadach sprawdzalimy
bowiem, czy i jest mniejsze bd rwne 10, a teraz, czy jest wiksze bd rwne. Dzieje si tak, dlatego e poprzednio sprawdzalimy,

46

Java wiczenia praktyczne

czy ptla ma by dalej wykonywana, natomiast obecnie, czy ma zosta


zakoczona. Przy okazji wykorzystalimy te kolejn instrukcj,
mianowicie break. Suy ona do natychmiastowego przerwania wykonywania ptli.
Kolejna przydatna instrukcja, continue, powoduje rozpoczcie kolejnej iteracji, tzn. w miejscu jej wystpienia wykonywanie biecej
iteracji jest przerywane i rozpoczyna si kolejny przebieg.
W I C Z E N I E

2.25.

Zastosowanie instrukcji continue

Napisz program wywietlajcy na ekranie liczby od 1 do 20, ktre


nie s podzielne przez 2. Skorzystaj z ptli for i instrukcji continue.
public
class Main
{
public static void main (String args[])
{
for (int i = 1; i <= 20; i++){
if (i % 2 == 0)
continue;
System.out.println (i);
}
}
}

Przypomnijmy, e % to operator dzielenia modulo, tzn. dostarcza on


reszt z dzielenia. Nic jednak nie stoi na przeszkodzie, aby dziaajc
w taki sam sposb aplikacj napisa bez uycia instrukcji continue.
W I C Z E N I E

2.26.

Liczby niepodzielne przez dwa

Zmodyfikuj kod z wiczenia 2.25 tak, aby nie byo koniecznoci


uycia instrukcji continue.
public
class Main
{
public static void main (String args[])
{
for (int i = 1; i <= 20; i++){
if (i % 2 != 0) System.out.println (i);
}
}
}

Rozdzia 2. Zmienne, operatory i instrukcje

47

Ptla while
O ile ptla typu for suy raczej do wykonywania znanej z gry liczby operacji, to w przypadku ptli while liczba ta nie jest zwykle znana. Nie jest to, oczywicie, obligatoryjny podzia. Tak naprawd obie
mona napisa w taki sposb, aby byy swoimi funkcjonalnymi odpowiednikami. Oglna konstrukcja ptli typu while jest nastpujca:
while (wyraenie warunkowe){
instrukcje
}

Instrukcje s wykonywane tak dugo, dopki wyraenie warunkowe


jest prawdziwe. Oznacza to, e gdzie w ptli musi wystpi modyfikacja warunku bd te instrukcja break. Inaczej bdzie si ona wykonywaa w nieskoczono!
W I C Z E N I E

2.27.

Budowa ptli while

Uywajc ptli typu while, napisz program wywietlajcy na ekranie


10 razy napis Java.
public
class Main
{
public static void main (String args[])
{
int i = 1;
while (i <= 10){
System.out.println ("Java");
i++;
}
}
}
W I C Z E N I E

2.28.

Poczone wyraenia

Zmodyfikuj kod z wiczenia 2.27 tak, aby wyraenie warunkowe


zmieniao jednoczenie warto zmiennej i.
public
class Main
{
public static void main (String args[])
{
int i = 1;

48

Java wiczenia praktyczne


while (i++ <= 10){
System.out.println ("Java");
}
}
}

W I C Z E N I E

2.29.

Liczby nieparzyste i ptla while

Korzystajc z ptli while, napisz program wywietlajcy na ekranie


liczby od 1 do 20 niepodzielne przez 2.
public
class Main
{
public static void main (String args[])
{
int i = 1;
while (i <= 20){
if (i % 2 != 0)
System.out.println (i);
i++;
}
}
}

Ptla do...while
Istnieje jeszcze jedna odmiana ptli. Jest to do...while. Jej konstrukcja jest nastpujca:
do{
instrukcje;
}
while (warunek);
W I C Z E N I E

2.30.

Budowa ptli do...while

Korzystajc z ptli do...while, napisz program wywietlajcy na


ekranie 10 razy dowolny napis.
public
class Main
{
public static void main (String args[])
{

Rozdzia 2. Zmienne, operatory i instrukcje

49

int i = 1;
do{
System.out.println ("Java");
}
while (i++ <= 9);
}
}

Wydawa by si mogo, e to przecie to samo, co zwyka ptla while. Jest jednak pewna rnica. Ot w przypadku ptli do...while
instrukcje wykonane s co najmniej jeden raz, nawet jeli warunek
jest na pewno faszywy.
W I C Z E N I E

2.31.

Ptla do...while z faszywym warunkiem

Zmodyfikuj kod z wiczenia 2.30 w taki sposb, aby wyraenie warunkowe na pewno byo faszywe. Zaobserwuj wyniki dziaania programu.
public
class Main
{
public static void main (String args[])
{
int i = 10;
do{
System.out.println ("Java");
}
while (i++ <= 9);
}
}

Ptla foreach
Poczwszy od wersji 1.5 (5.0), Java udostpnia nowy rodzaj ptli.
Jest ona nazywana ptl foreach lub rozszerzon ptl for (z ang.
enhanced for) i pozwala na automatyczn iteracj po kolekcji obiektw lub te po tablicy. Jej dziaanie pokaemy wanie w tym drugim
przypadku. Jeli bowiem mamy tablic tab zawierajc wartoci
pewnego typu, to do przejrzenia wszystkich jej elementw moemy
uy konstrukcji w postaci:
for(typ val: tablica){
//instrukcje
}

50

Java wiczenia praktyczne

W takim przypadku w kolejnych przebiegach ptli for pod val bdzie


podstawiana warto kolejnej komrki.
W I C Z E N I E

2.32.

Wykorzystanie rozszerzonej ptli for

Zadeklaruj tablic liczb typu int i wypenij j przykadowymi danymi. Nastpnie uyj rozszerzonej ptli for do wywietlenia zawartoci tablicy na ekranie.
public
class Main
{
public static void main (String args[])
{
int tab[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for(int val: tab){
System.out.println(val);
}
}
}

You might also like