Idź do
• Spis treści
• Przykładowy rozdział
• Katalog online
• Dodaj do koszyka
• Zamów cennik
• Zamów informacje
o nowościach
• Fragmenty książek
online
Helion SA
ul. Kościuszki 1c
44-100 Gliwice
tel. 32 230 98 63
e-mail: helion@helion.pl
© Helion 1991–2011
Katalog książek
Twój koszyk
Cennik i informacje
Czytelnia
Kontakt
• Zamów drukowany
katalog
Java. Zadania
z programowania
z przykładowymi
rozwiązaniami
Autor: Mirosław Kubiak
ISBN: 978-83-246-2944-2
Format: 140×208, stron: 112
Java w analizie konkretnych przykładów
• Proste operacje wejścia/wyjścia
• Tablice oraz iteracje
• Programowanie obiektowe i pliki tekstowe
Java to jeden z najważniejszych używanych obecnie obiektowych języków programowania. Do
jego największych zalet należą łatwe przenoszenie programów między platformami i możliwość
stosowania na urządzeniach przenośnych. Dobry programista, student lub nauczyciel informatyki,
a także każdy człowiek zainteresowany programowaniem powinien znać podstawy tego języka
i posiadać umiejętność rozwiązywania konkretnych problemów. Podobnie zresztą powinien
opanować najważniejsze zagadnienia dotyczące programowania w językach C++ i Turbo Pascal –
i stosować je w praktyce. Trzyczęściowy zbiór, w którym zamieszczono te same lub bardzo
zbliżone zadania wraz z rozwiązaniami w każdym z wyżej wymienionych języków, pozwala
sprawdzić i uzupełnić wiedzę poprzez analizę podanego kodu.
Książka „Java. Zadania z programowania z przykładowymi rozwiązaniami” to jedna z trzech części
zbioru zadań programistycznych, zawierająca zadania w języku Java. Będziesz mógł dokładnie
prześledzić, jak wyglądają w tym języku operacje wejścia/wyjścia i instrukcje warunkowe. Dowiesz
się, do czego potrzebne są iteracje oraz w jaki sposób używa się tablic. Zobaczysz, na czym polega
programowanie obiektowe i jak działa ono w Javie. Poznasz także zastosowania plików
tekstowych. Taki układ książki ułatwi Ci przyswojenie sobie najważniejszych zagadnień z języka
Java w najlepszy możliwy sposób – na prostych, konkretnych przykładach.
• Proste operacje wejścia/wyjścia
• Instrukcje warunkowe
• Iteracje
• Tablice – deklarowanie, dostęp do elementów, dwuwymiarowe
• Programowanie obiektowe
• Pliki tekstowe
Praktycznie opanuj podstawy języka Java
Spis tre!ci
Od autora
5
Rozdzia" 1. Proste operacje wej!cia-wyj!cia
7
Operacje wej%cia-wyj%cia — informacje ogólne
7
Rozdzia" 2. Podejmujemy decyzje w programie
19
Instrukcje warunkowe w j7zyku Java
19
Rozdzia" 3. Iteracje
31
Iteracje — informacje ogólne
31
P7tla for
32
P7tla do ... while
33
P7tla while
33
Rozdzia" 4. Tablice
57
Deklarowanie tablic jednowymiarowych
57
Dost7p do elementów tablicy
58
Tablice dwuwymiarowe
62
Rozdzia" 5. Programowanie obiektowe
79
Programowanie obiektowe — informacje ogólne
79
Rekurencja
92
Rozdzia" 6. Pliki tekstowe
97
Pliki tekstowe — informacje ogólne
97
1
Proste operacje
wej!cia-wyj!cia
W tym rozdziale zamieszczono proste zadania wraz z przyk%adowymi
rozwi&zaniami ilustruj&ce, w jaki sposób komputer komunikuje si*
z u+ytkownikiem w j*zyku Java.
Operacje wej!cia-wyj!cia
— informacje ogólne
KaQda aplikacja powinna posiadaL moQliwo%L komunikowania si7
z uQytkownikiem. WykorzystujHc proste przykKady, pokaQemy, w jaki
sposób program napisany w j7zyku Java komunikuje si7 z nim poprzez
standardowe operacje wej%cia-wyj%cia.
Operacje wej%cia-wyj%cia w Javie sH realizowane poprzez strumienie.
Strumie$
jest poj7ciem abstrakcyjnym. MoQe on wysyKaL i pobieraL
informacje i jest poKHczony z fizycznym urzHdzeniem (np. klawiatura,
ekran) poprzez system wej%cia-wyj%cia. W j7zyku tym zdefiniowano
dwa typy strumieni: bajtowe i znakowe. Standardowy strumieF wyj-
%ciowy w Javie jest reprezentowany przez obiekt
1
out
znajdujHcy si7
1
Obiekty zostanH omówione w rozdziale 5.
8
J a v a . Z a d a n i a z p r o g r a m o w a n i a z p r z y k " a d o w y m i r o z w i # z a n i a m i
w klasie
System
. Jest to obiekt statyczny klasy
PrintStream
zawierajHcy
metody
print()
i
println()
.
Metoda
println()
wy%wietla argumenty podane w nawiasach (), a na-
st7pnie przechodzi do poczHtku nowej linii. PewnH jej odmianH jest me-
toda
print()
. Jej dziaKanie polega na wy%wietlaniu argumentów poda-
nych w nawiasach () bez przemieszczania kursora do nowego wiersza.
Z A D A N I E
1.1
Napisz program, który oblicza pole prostokHta. Warto%ci boków
a
i
b
wprowadzamy z klawiatury. W programie naleQy przyjHL,
Qe zmienne
a
,
b
oraz
pole
sH typu
double
(rzeczywistego).
Przyk%adowe rozwi&zanie — listing 1.1
package zadanie11; // Zadanie 1.1
import java.io.*;
public class Main
{
public static void main(String[] args)
throws IOException
{
double a, b, pole;
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Program oblicza pole prostokKta.");
System.out.println("Podaj bok a.");
a = Double.parseDouble(br.readLine());
System.out.println("Podaj bok b.");
b = Double.parseDouble(br.readLine());
pole = a*b;
System.out.print("Pole prostokKta o boku a = " + a + "
i boku b = " + b);
System.out.println(" wynosi " + pole + ".");
}
}
Klasy w Javie grupowane sH w jednostki zwane pakietami (ang. packa-
ge). Pakiet to zestaw powiHzanych ze sobH tematycznie klas. Do jego
utworzenia sKuQy sKowo kluczowe
package
, po którym nast7puje nazwa
pakietu zakoFczona %rednikiem, co ilustruje linijka kodu poniQej:
R o z d z i a " 1 . • P r o s t e o p e r a c j e w e j ! c i a - w y j ! c i a
9
package zadanie11; // Zadanie 1.1
2
Linijka kodu
double a, b, pole;
umoQliwia deklaracj7 zmiennych
a
,
b
i
pole
(wszystkie sH typu rze-
czywistego —
double
) w programie. Instrukcja
System.out.println("Program oblicza pole prostokKta.");
wy%wietla na ekranie komputera komunikat Program oblicza pole
prostok&ta.
W celu czytania z klawiatury liter i cyfr naleQy skorzystaL z dwóch
klas:
InputStreamReader
oraz
BufferedReader
. Najpierw tworzymy nowy
obiekt klasy
InputStreamReader
, przekazujHc jej konstruktorowi obiekt
System.in
. MoQna go nast7pnie wykorzystaL w konstruktorze klasy
BufferedReader
. Tak opisana konstrukcja ma nast7pujHcy zapis:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PowstaKy obiekt klasy
BufferedReader
moQemy przypisaL do zmiennej
referencyjnej
br
i dalej, poprzez metod7
readLine()
, moQemy wykorzy-
staL go do wczytywania zmiennej
a
typu
double
ze strumienia wej-
%ciowego. Ilustruje to nast7pujHca linijka kodu:
a = Double.parseDouble(br.readLine());
Wczytywanie liczb odbywa si7 tak samo jak wczytywanie tekstu,
musimy jednak dokonaL odpowiedniej konwersji, tzn. zamiany ciHgu
znaków na odpowiadajHcH mu warto%L liczbowH. SKuQy do tego jedna
z poniQszych metod statycznych:
parseByte
z klasy
Byte
do odczytu bajtów,
parseDouble
z klasy
Double
do odczytu liczb typu
double
,
parseFloat
z klasy
Float
do odczytu liczb typu
float
,
parseInt
z klasy
Int
do odczytu liczb typu
int
,
parseLong
z klasy
Long
do odczytu liczb typu
long
.
Aby nasz program mógK zostaL skompilowany, musimy do niego do-
daL nast7pujHce dwie linijki kodu:
import java.io.*;
2
Komentarze w programie oznaczamy dwoma uko%nikami //; // to jest komentarz.
1 0
J a v a . Z a d a n i a z p r o g r a m o w a n i a z p r z y k " a d o w y m i r o z w i # z a n i a m i
oraz
throws IOException
SH one niezb7dne do obsKugi bK7dów wej%cia-wyj%cia. SKowo kluczowe
import
oznacza, Qe do programu zaimportowano wszystkie (po kropce
*
)
pakiety java.io.
Pole prostokHta zostaje obliczone w instrukcji
pole = a*b;
Za wy%wietlenie warto%ci zmiennych
a
i
b
oraz
pole
wraz z odpo-
wiednim opisem sH odpowiedzialne nast7pujHce linijki kodu:
System.out.print("Pole prostokKta o boku a = " + a + " i boku b = " + b);
System.out.println(" wynosi " + pole + ".");
Rezultat dziaKania programu moQna zobaczyL na rysunku 1.1.
Program oblicza pole prostok!ta.
Podaj bok a.
1
Podaj bok b.
2
Pole prostok!ta o boku a = 1.0 i boku b = 2.0 wynosi 2.0.
Rysunek 1.1.
Efekt dzia%ania programu Zadanie 1.1
Z A D A N I E
1.2
Napisz program, który wy%wietla na ekranie komputera warto%L
predefiniowanej staKej = 3,14… NaleQy przyjHL format wy%wie-
tlania tej staKej z dokKadno%ciH do pi7ciu miejsc po przecinku.
Wskazówka
J zyk Java umo"liwia formatowanie wy#wietlanych danych w podobny
sposób jak w j zyku C. S$u"y do tego metoda printf. Jej sk$adnia jest
nast puj%ca:
String format;
System.out.printf(format, arg_1, arg_2, ..., arg_n);
.
R o z d z i a " 1 . • P r o s t e o p e r a c j e w e j ! c i a - w y j ! c i a
1 1
Przyk%adowe rozwi&zanie — listing 1.2
package zadanie12; // Zadanie 1.2
public class Main
{
public static void main(String[] args)
{
System.out.println("Program wyRwietla liczbS pi z zadanK
dokTadnoRciK.");
System.out.printf("Pi = " + "%6.5f\n", Math.PI);
}
}
Specyfikatory typów mogH byL nast7pujHce:
%d
—
integer
,
%e
—
double
,
%f
—
float
.
Pomi7dzy znakiem % i literH przyporzHdkowanH danemu typowi moQna
okre%liL ilo%L pól, na których ma zostaL wy%wietlona liczba, np.:
%7.2f
— oznacza przyznanie siedmiu pól na liczb7 typu
float
,
w tym dwóch pól na jej cz7%L uKamkowH;
%4d
— oznacza przyznanie czterech pól na liczb7 typu caKkowitego.
W programie zapis
System.out.printf("Pi = " + "%6.5f\n", Math.PI);
powoduje, Qe na wydruk liczby ! przeznaczonych zostaje sze%L pól,
w tym pi7L na cz7%L uKamkowH. Znak specjalny
"...\n"
(ang. new line)
oznacza przej%cie na poczHtek nowego wiersza.
Math
jest standardowH
klasH Javy, która umoQliwia obliczenia matematyczne.
Rezultat dziaKania programu moQna zobaczyL na rysunku 1.2.
Program wy"wietla liczb# pi z zadan! dok$adno"ci!.
Pi = 3,14159
Rysunek 1.2.
Efekt dzia%ania programu Zadanie 1.2
1 2
J a v a . Z a d a n i a z p r o g r a m o w a n i a z p r z y k " a d o w y m i r o z w i # z a n i a m i
Z A D A N I E
1.3
Napisz program, który wy%wietla na ekranie komputera pier-
wiastek kwadratowy z warto%ci predefiniowanej = 3,14…
NaleQy przyjHL format wy%wietlania pierwiastka kwadratowego
ze staKej !z dokKadno%ciH do dwóch miejsc po przecinku.
Przyk%adowe rozwi&zanie — listing 1.3
package zadanie13; // Zadanie 1.3
public class Main
{
public static void main(String[] args)
{
System.out.println("Program wyRwietla pierwiastek kwadratowy ");
System.out.println("z liczby pi z dokTadnoRciK dwóch miejsc po
przecinku.");
System.out.printf("Sqrt(Pi) = " + "%2.2f\n", Math.sqrt(Math.PI));
}
}
Metoda
sqrt()
pozwala na obliczenie pierwiastka kwadratowego. Jest
ona metodH standardowej klasy
Math
.
Rezultat dziaKania programu moQna zobaczyL na rysunku 1.3.
Program wy"wietla pierwiastek kwadratowy
z liczby pi z dok$adno"ci! dwóch miejsc po przecinku.
Sqrt(Pi) = 1,77
Rysunek 1.3.
Efekt dzia%ania programu Zadanie 1.3
Z A D A N I E
1.4
Napisz program, który oblicza obj7to%L kuli o promieniu
r
.
Warto%L promienia wprowadzamy z klawiatury. W programie
naleQy przyjHL, Qe zmienne: promieF
r
i
objetosc
, sH typu
double
(rzeczywistego). Dla tych zmiennych naleQy przyjHL format
wy%wietlania na ekranie z dokKadno%ciH do dwóch miejsc po
przecinku.
R o z d z i a " 1 . • P r o s t e o p e r a c j e w e j ! c i a - w y j ! c i a
1 3
Przyk%adowe rozwi&zanie — listing 1.4
package zadanie14; // Zadanie 1.4
import java.io.*;
public class Main
{
public static void main(String[] args)
throws IOException
{
double r, objetosc;
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Program oblicza objStoR^ kuli.");
System.out.println("Podaj promie_ r.");
r = Double.parseDouble(br.readLine());
objetosc = 4.0*Math.PI*r*r*r/3;
System.out.print("ObjStoR^ kuli o promieniu r = ");
System.out.printf("%2.2f", r);
System.out.print(" wynosi ");
System.out.printf("%2.2f.", objetosc);
}
}
Obj7to%L kuli o promieniu
r
oblicza nast7pujHca linijka kodu:
objetosc = 4.0*Math.PI*r*r*r/3;
gdzie pot7gowanie zamieniono na mnoQenie.
Rezultat dziaKania programu moQna zobaczyL na rysunku 1.4.
Program oblicza obj#to"5 kuli.
Podaj promie6 r.
1
Obj#to"5 kuli o promieniu r = 1,00 wynosi 4,19.
Rysunek 1.4.
Efekt dzia%ania programu Zadanie 1.4
1 4
J a v a . Z a d a n i a z p r o g r a m o w a n i a z p r z y k " a d o w y m i r o z w i # z a n i a m i
Z A D A N I E
1.5
Napisz program, który oblicza wynik dzielenia caKkowitego
bez reszty dwóch liczb caKkowitych: a = 37 i b = 11.
Wskazówka
W j zyku Java w przypadku zastosowania operatora dzielenia / dla liczb
ca$kowitych reszta wyniku jest pomijana (tak samo jest w C i C++).
W Turbo Pascalu nale"y zastosowa, operator dzielenia ca$kowitego
bez reszty div.
Przyk%adowe rozwi&zanie — listing 1.5
package zadanie15; // Zadanie 1.5
public class Main
{
public static void main(String[] args)
{
int a = 37;
int b = 11;
System.out.println("Program wyRwietla wynik dzielenia caTkowitego");
System.out.println("bez reszty dwóch liczb caTkowitych.");
System.out.println("Dla liczb a = " + a + ", b = " + b);
System.out.println(a + "/" + b + " = "+ a/b + ".");
}
}
Rezultat dziaKania programu moQna zobaczyL na rysunku 1.5.
Program wy"wietla wynik dzielenia ca$kowitego
bez reszty dwóch liczb ca$kowitych.
Dla liczb a = 37, b = 11
37/11 = 3.
Rysunek 1.5.
Efekt dzia%ania programu Zadanie 1.5
R o z d z i a " 1 . • P r o s t e o p e r a c j e w e j ! c i a - w y j ! c i a
1 5
Z A D A N I E
1.6
Napisz program, który oblicza reszt7 z dzielenia caKkowitego
dwóch liczb caKkowitych: a = 37 i b = 11.
Wskazówka
Nale"y zastosowa, operator reszty z dzielenia ca$kowitego modulo, który
oznaczamy w j zyku Java symbolem %. Podobnie jak w j zykach C i C++,
operator ten umo"liwia uzyskanie tylko reszty z dzielenia, natomiast
warto#, ca$kowita jest odrzucana.
Przyk%adowe rozwi&zanie — listing 1.6
package zadanie16; // Zadanie 1.6
public class Main
{
public static void main(String[] args)
{
int a = 37;
int b = 11;
System.out.println("Program oblicza resztS z dzielenia
caTkowitego");
System.out.println("dwóch liczb caTkowitych.");
System.out.println("Dla liczb a = " + a + ", b = " + b);
System.out.println(a + "%" + b + " = " + a%b + ".");
}
}
Rezultat dziaKania programu moQna zobaczyL na rysunku 1.6.
Program oblicza reszt# z dzielenia ca$kowitego
dwóch liczb ca$kowitych.
Dla liczb a = 37, b = 11
37%11 = 4.
Rysunek 1.6.
Efekt dzia%ania programu Zadanie 1.6
1 6
J a v a . Z a d a n i a z p r o g r a m o w a n i a z p r z y k " a d o w y m i r o z w i # z a n i a m i
Z A D A N I E
1.7
Napisz program, który oblicza sum7, róQnic7, iloczyn i iloraz
dla dwóch liczb
x
i
y
wprowadzanych z klawiatury. W pro-
gramie naleQy zaKoQyL, Qe zmienne
x
i
y
sH typu
float
(rze-
czywistego). Dla zmiennych
x
,
y
,
suma
,
roznica
,
iloczyn
i
iloraz
naleQy przyjHL format ich wy%wietlania na ekranie z dokKad-
no%ciH do dwóch miejsc po przecinku.
Przyk%adowe rozwi&zanie — listing 1.7
package zadanie17; // Zadanie 1.7
import java.io.*;
public class Main
{
public static void main(String[] args)
throws IOException
{
float x, y, suma, roznica,iloczyn, iloraz;
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Program oblicza sumS, róbnicS, iloczyn
i iloraz ");
System.out.println("dla dwóch liczb x i y wprowadzonych
z klawiatury.");
System.out.println("Podaj x.");
x = Float.parseFloat(br.readLine());
System.out.println("Podaj y.");
y = Float.parseFloat(br.readLine());
suma = x+y;
roznica = x-y;
iloczyn = x*y;
iloraz = x/y;
System.out.printf("Dla liczb x = " + "%2.2f",x);
System.out.printf(" i y = " + "%2.2f",y);
System.out.println(); // wy)wietlenie pustej linii
System.out.printf("suma = " + "%2.2f,\n", + suma);
System.out.printf("róbnica = " + "%2.2f,\n", + roznica);
System.out.printf("iloczyn = " + "%2.2f,\n", + iloczyn);
System.out.printf("iloraz = " + "%2.2f.\n", + iloraz);
}
}