January 6, 2017 | Author: Doberman Pinscher | Category: N/A
Download Osnove JAVA Programiranja Zbirka ...
Dejan ivkovi¢
OSNOVE JAVA PROGRAMIRANJA Zbirka pitanja i zadataka sa re²enjima
UNIVERZITET SINGIDUNUM FAKULTET ZA INFORMATIKU I MENADMENT
Beograd, 2009
500
978-86-7912-190-5
Sadrºaj Spisak programa
iv
Predgovor
vii
I 1 2 3
Pitanja i zada i Uvod u Java programiranje
3
Pitanja
3
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Uvod u programski jezik Java
7
Pitanja
7
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Osnovni elementi jezika Java
11
Pitanja
11
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programski zada i
4
Pitanja
23
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Metodi
36
39 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programski zada i
39
. . . . . . . . . . . . . . . . . . . . . . . . .
50
Klase i objekti
53
Pitanja
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
Programski zada i
7
21
23
Pitanja
6
. . . . . . . . . . . . . . . . . . . . . . . . .
Upravlja£ke naredbe Programski zada i
5
1
. . . . . . . . . . . . . . . . . . . . . . . . .
65
Osnovne strukture podataka
67
Pitanja
67
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programski zada i
. . . . . . . . . . . . . . . . . . . . . . . . .
i
81
ii 8
Sadrºaj Nasleivanje klasa
85
Pitanja
85
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programski zada i
9
. . . . . . . . . . . . . . . . . . . . . . . . .
98
Posebne klase i interfejsi
99
Pitanja
99
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programski zada i
. . . . . . . . . . . . . . . . . . . . . . . . .
10 Gra£ko programiranje Pitanja
109
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programski zada i
106
. . . . . . . . . . . . . . . . . . . . . . . . .
109 125
II Re²enja
127
1
Uvod u Java programiranje
129
Odgovori na pitanja
129
2 3
4
Uvod u programski jezik Java
133
Odgovori na pitanja
133
135
Odgovori na pitanja
. . . . . . . . . . . . . . . . . . . . . . . .
135
Re²enja zadataka . . . . . . . . . . . . . . . . . . . . . . . . . .
143
Upravlja£ke naredbe
149 . . . . . . . . . . . . . . . . . . . . . . . .
149
Re²enja zadataka . . . . . . . . . . . . . . . . . . . . . . . . . .
155
Metodi Odgovori na pitanja
6
163 . . . . . . . . . . . . . . . . . . . . . . . .
163
Re²enja zadataka . . . . . . . . . . . . . . . . . . . . . . . . . .
168
Klase i objekti
173
Odgovori na pitanja
7
. . . . . . . . . . . . . . . . . . . . . . . .
Osnovni elementi jezika Java
Odgovori na pitanja
5
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
173
Re²enja zadataka . . . . . . . . . . . . . . . . . . . . . . . . . .
179
Osnovne strukture podataka
191
Odgovori na pitanja
. . . . . . . . . . . . . . . . . . . . . . . .
191
Re²enja zadataka . . . . . . . . . . . . . . . . . . . . . . . . . .
198
Sadrºaj 8
Nasleivanje klasa Odgovori na pitanja
9
iii 213 . . . . . . . . . . . . . . . . . . . . . . . .
213
Re²enja zadataka . . . . . . . . . . . . . . . . . . . . . . . . . .
219
Posebne klase i interfejsi
231
Odgovori na pitanja
. . . . . . . . . . . . . . . . . . . . . . . .
231
Re²enja zadataka . . . . . . . . . . . . . . . . . . . . . . . . . .
235
10 Gra£ko programiranje Odgovori na pitanja
265 . . . . . . . . . . . . . . . . . . . . . . . .
265
Re²enja zadataka . . . . . . . . . . . . . . . . . . . . . . . . . .
274
Spisak programa 3.1
ImePrezime.java . . . . . . . . . . . . . . . . . . . . . . . . .
143
3.2
Ini ijali.java
. . . . . . . . . . . . . . . . . . . . . . . . . . .
143
3.3
A4.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
143
3.4
CelFar.java . . . . . . . . . . . . . . . . . . . . . . . . . . . .
144
3.5
Kamata.java . . . . . . . . . . . . . . . . . . . . . . . . . . .
144
3.6
PravougliTrougao.java
145
. . . . . . . . . . . . . . . . . . . . .
3.7
Tren.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
146
4.1
Uskrs1.java . . . . . . . . . . . . . . . . . . . . . . . . . . . .
155
4.2
Uskrs2.java . . . . . . . . . . . . . . . . . . . . . . . . . . . .
155
4.3
PismoGlava1.java
4.4
ZmijskeO£i.java
4.5
Niz3n1.java
4.6
NZD1.java . . . . . . . . . . . . . . . . . . . . . . . . . . . .
158
4.7
NBD.java
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
159
4.8
Romb.java . . . . . . . . . . . . . . . . . . . . . . . . . . . .
159
4.9
SlovaCifre.java . . . . . . . . . . . . . . . . . . . . . . . . . .
160
4.10
ListaRe£i.java
. . . . . . . . . . . . . . . . . . . . . . . . . .
161
5.1
NZD2.java . . . . . . . . . . . . . . . . . . . . . . . . . . . .
168
5.2
Niz3n1m.java
168
5.3
KapString.java . . . . . . . . . . . . . . . . . . . . . . . . . .
169
5.4
HeksSistem.java . . . . . . . . . . . . . . . . . . . . . . . . .
170
5.5
DveKo ke1.java
171
. . . . . . . . . . . . . . . . . . . . . . . .
156
. . . . . . . . . . . . . . . . . . . . . . . . .
157
. . . . . . . . . . . . . . . . . . . . . . . . . . .
157
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
6.1
Mese£niKalendar.java . . . . . . . . . . . . . . . . . . . . . .
179
6.2
TKK.java
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
180
6.3
KompleksanBroj.java . . . . . . . . . . . . . . . . . . . . . .
183
6.4
RimskiBroj.java . . . . . . . . . . . . . . . . . . . . . . . . .
185
6.5
DveKo ke2.java
. . . . . . . . . . . . . . . . . . . . . . . . .
187
6.6
PismoGlava.java . . . . . . . . . . . . . . . . . . . . . . . . .
189
7.1
Sito.java
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
198
7.2
Igraivota.java . . . . . . . . . . . . . . . . . . . . . . . . . .
199
iv
Spisak programa
v
7.3
Ke²Memorija.java . . . . . . . . . . . . . . . . . . . . . . . .
201
7.4
esteRe£i.java . . . . . . . . . . . . . . . . . . . . . . . . . .
203
7.5
DomZdravlja.java . . . . . . . . . . . . . . . . . . . . . . . .
206
8.1
PovezanaLista.java
. . . . . . . . . . . . . . . . . . . . . . .
219
8.2
PoliLinija.java . . . . . . . . . . . . . . . . . . . . . . . . . .
221
8.3
PovezanaLista1.java . . . . . . . . . . . . . . . . . . . . . . .
225
9.1
Karta.java
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
235
9.2
Konvertor.java . . . . . . . . . . . . . . . . . . . . . . . . . .
236
9.3
Ko²arka²kaUtakmi a.java . . . . . . . . . . . . . . . . . . . .
238
9.4
GO.java
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
244
9.5
GO1.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
247
9.6
Ku¢naZabava.java . . . . . . . . . . . . . . . . . . . . . . . .
250
9.7
PovezanaLista2.java . . . . . . . . . . . . . . . . . . . . . . .
255
9.8
Igraivota1.java . . . . . . . . . . . . . . . . . . . . . . . . .
257
9.9
Sortiranje.java . . . . . . . . . . . . . . . . . . . . . . . . . .
260
10.1
Kamion.java . . . . . . . . . . . . . . . . . . . . . . . . . . .
274
10.2
ah.java
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
275
10.3
Ribi e.java . . . . . . . . . . . . . . . . . . . . . . . . . . . .
276
10.4
Kalkulator.java
. . . . . . . . . . . . . . . . . . . . . . . . .
280
10.5
DigitalniSat.java . . . . . . . . . . . . . . . . . . . . . . . . .
283
10.6
Prori anjeSudbine.java
284
. . . . . . . . . . . . . . . . . . . . .
10.7
PomeranjeKvadrata.java
. . . . . . . . . . . . . . . . . . . .
286
10.8
IgraKliznaTabla1.java . . . . . . . . . . . . . . . . . . . . . .
290
10.9
IgraKliznaTabla2.java . . . . . . . . . . . . . . . . . . . . . .
293
10.10 Editor.java . . . . . . . . . . . . . . . . . . . . . . . . . . . .
297
10.11 Lopti e.java
301
. . . . . . . . . . . . . . . . . . . . . . . . . . .
10.12 AnalogniSat.java
. . . . . . . . . . . . . . . . . . . . . . . .
305
Predgovor Ova zbirka pitanja i zadataka moºe posluºiti £itao ima za proveru i utvrivanje znanja iz Java programiranja. knjige
Osnove Java programiranja
Zbirka je prilagoena nivou
i moºe posluºiti kao njen praktikum,
jer potpuno prati logi£ku nît izlaganja materijala u toj knjizi. Kod svakog pitanja za proveru znanja su dati poten ijalni ta£ni odgovori. Pri tome, pitanje sa vi²e ponuenih odgovora ozna£enih simbolom
❍ ima samo
jedan ta£an odgovor; pitanje sa vi²e ponuenih odgovora ozna£enih simbolom
❑ ima
vi²e
ta£nih odgovora i treba ih sve obeleºiti. Neka pitanja su data u obliku nepotpune re£eni e na mestu ozna£enom simbolom
. U takvom slu£aju za to mesto treba izabrati i
ozna£iti ponueni odgovor kako bi s njim re£eni a bila ta£na. Kod sastavljanja programskih zadataka je u£injen napor kako bi njihovo re²enje zahtevalo samo one elemente Jave koji su predstavljeni do odgovaraju¢eg poglavlja u knjizi
Osnove Java programiranja.
Ali, da
bi zada i ipak bili interesantniji i prakti£niji, njihova re²enja se ponekad oslanjaju na klase Java platforme o kojima nije bilo re£i u toj knjizi. Ovo se prvenstveno odnosi na gra£ke programe u poslednjem poglavlju i £itao i se upu¢uju na zvani£nu dokumenta iju Jave iz koje mogu saznati vi²e detalja. Kao i uvek, bio bih veoma zahvalan £itao ima na njihovom mi²ljenju o zbir i. Sve primedbe i pronaene gre²ke se mogu poslati elektronskom po²tom na adresu
[email protected]. Dejan ivkovi¢
Beograd, Srbija jun 2009.
vii
Deo I
Pitanja i zada i
1
Glava
1 Uvod u Java programiranje Pitanja 1.
Kako se nazivaju zi£ki delovi od kojih se sastoji ra£unar (pro esor, memorija, disk, tastatura, monitor i tako dalje)?
❍ ❍ ❍ ❍
2.
Softver Hardver Operativni sistem Windows
Kako se nazivaju svi programi u ra£unaru £ijim izvr²avanjem ra£unar obavlja korisne poslove za ljude?
❍ ❍ ❍ ❍
3.
Softver Hardver Operativni sistem Windows
ta je mozak ra£unara?
❍ ❍ ❍
Hardver Pro esor (CPU) Memorija
3
4
Uvod u Java programiranje ❍
4.
Disk
Od £ega se sastoji ra£unarski program (pojednostavljeno ali najta£nije re£eno)?
5.
6.
7.
❍
naredbi
❍
podataka
❍
naredbi i podataka
❍
teksta
Koliko bitova ima jedan bajt?
❍
4
❍
8
❍
16
❍
32
Ra£unar moºe izvr²avati programe samo na
❍
ma²inskom jeziku
❍
engleskom jeziku
❍
prirodnom jeziku
❍
jeziku visokog nivoa
.
ta prevodi programe napisane na programskom jeziku visokog nivoa u programe na ma²inskom jeziku?
8.
❍
Operativni sistemi
❍
Pro esori
❍
Ljudi
❍
Prevodio i (kompajleri)
Kako se naziva program preveden na ma²inski jezik Java virtuelne ma²ine?
❍
Java bajtkod
❍
Java objektni kod
Uvod u Java programiranje
9.
❍
Java aplet
❍
Java aplika ija
5
ta mora biti ime datoteke u kojoj se nalazi ovaj Java program kojeg £ini jedna klasa
Test?
public class Test { . . . public static void main(String[] args) { . . . } }
10.
❍
Test.txt
❍
Test.class
❍
Test.java
❍
Main.java
❍
Main.txt
Ime datoteke u kojoj se nalazi preveden Java program (Java bajtkod) zavr²ava se suksom
11.
❍
.java
❍
.obj
❍
.class
❍
.exe
DOS komanda za prevoenje Java programa koji se nalazi u datote i
Test.java je
12.
.
.
❍
javac Test.java
❍
compile Test.java
❍
prevedi Test.java
❍
javap Test.java
DOS komanda za izvr²avanje (interpretiranje) prevedenog Java programa u datote i
Test.class je
.
6
13.
Uvod u Java programiranje ❍
javac Test
❍
izvrsi Test
❍
java Test
❍
java Test.class
Gra£ka okruºenja za razvoj Java programa su
❑
NetBeans
❑
DOS
❑
Windows
❑
DrJava
❑
Linux
.
Glava
2 Uvod u programski jezik Java Pitanja 1.
2.
3.
Klasa je opis
❍
promenljivih
❍
pro edura
❍
programa
❍
objekata
sa zajedni£kim svojstvima.
Objekat je primerak (instan a) neke
❍
promenljive
❍
pro edure
❍
klase
❍
ma²ine
.
Dve glavne karakteristike svakog softverskog objekta su
❍
obeleºja (atributi) i mogu¢nosti (pona²anje)
❍
sastavni delovi i izgled
❍
broj i oblik
❍
identika ija i na£in upotrebe
7
.
8 4.
5.
6.
Uvod u programski jezik Java Nasleivanje klasa je na£in na koji se postoje¢a klasa moºe
❍
zameniti
❍
pro²iriti
❍
popraviti
❍
ukloniti
Raspoloºive klase Java platforme su organizovane po
❍
nazivima
❍
paketima
❍
modulima
❍
folderima
8.
.
Raspoloºive klase Java platforme se dodaju programu navoenjem deklara ije
7.
.
❍
import
❍
export
❍
module
❍
package
.
Koje su od ovih re£eni a o paketima ta£ne?
❑
Po konven iji, u Javi se imena paketa pi²u svim malim slovima.
❑
Deklara ija
package nije obavezna.
❑
Deklara ija
import nije obavezna.
❑
Klase u paketu
java.lang se automatski dodaju u program.
U kojem od ovih slu£ajeva
❑
/** tekst komentara */
❑
// tekst komentara
❑
-- tekst komentara
❑
/* tekst komentara */
❑
** tekst komentara **
nije
ispravno napisan komentar u Javi?
Uvod u programski jezik Java 9.
9
Dobar stil programiranja je vaºan, jer
.
❑
program se ne¢e prevesti zato ²to je napisan lo²im stilom
❑
program ¢e se brºe izvr²avati zato ²to je napisan dobrim stilom
❑
program ¢e biti £itljiviji zato ²to je napisan dobrim stilom
❑
program ¢e imati manji broj gre²aka zato ²to je napisan dobrim stilom
❑
10.
program ¢e se lak²e modikovati zato ²to je napisan dobrim stilom
Svaka naredba u Javi se zavr²ava
❍
ta£kom (.)
❍
ta£kom-zapetom (;)
❍
zapetom (,)
❍
zvezdi om (*)
.
Glava
3 Osnovni elementi jezika Java Pitanja 1.
Koje su od ovih re£i sluºbene re£i u Javi?
❑ ❑ ❑ ❑ ❑
2.
public static void class taˇ cno
U kojem su od ovih slu£ajeva ispravno napisana imena (identikatori) u Javi?
❑ ❑ ❑ ❑
3.
9x ekran brojStudenata znak+ili-
U kojem su od ovih slu£ajeva ispravno napisana imena (identikatori) u Javi?
❑ ❑
3praseta tri praseta 11
12
4.
5.
Osnovni elementi jezika Java ❑
preˇ cnik
❑
bzvz
Svi mogu¢i tipovi podataka u Javi se dele na
❍
spe i£ne i generalne
❍
elobrojne i realne
❍
numeri£ke i tekstualne
❍
primitivne i klasne
.
Koji od ovih elobrojnih tipova podataka zahteva najvi²e memorije za predstavljanje elih brojeva?
6.
❍
long
❍
int
❍
short
❍
byte
Koji od ovih tipova podataka u Javi sluºe za predstavljanje realnih brojeva?
7.
8.
❑
float
❑
int
❑
long
❑
double
❑
boolean
Jedan znak u Javi tipa
❍
jedan bajt
❍
dva bajta
❍
tri bajta
❍
£etiri bajta
char zauzima
Mogu¢e logi£ke vrednosti tipa
❑
taˇ cno
boolean u Javi su
u memoriji.
.
Osnovni elementi jezika Java
9.
❑
true
❑
false
❑
0
❑ ❑
1 netaˇ cno
U kojem su od ovih slu£ajeva ispravno napisana imena promenljivih prema
10.
13
konven iji
❑
kredit
❑
Kredit
❑ ❑
KREDIT
❑
KamatnaStopa
❑
kamatna_stopa
u Javi za davanje imena promenljivim?
kamatnaStopa
U kojem su od ovih slu£ajeva ispravno napisane naredbe za deklarisanje (denisanje) promenljivih u Javi?
11.
❑
int dužina; int širina;
❑ ❑
int dužina, širina;
❑
int dužina, int širina;
int dužina; širina;
U kojem su od ovih slu£ajeva ispravno napisane naredbe za prikazivanje teksta
12.
Java je kul! na ekranu?
❑
System.out.println(’Java je kul!’);
❑ ❑
System.println("Java je kul!");
❑
System.out.println("Java je kul!");
❑
System.out.print("Java je kul!");
❑
System.out.printf("Java je kul!");
System.out.writeln("Java je kul!");
Kojom se od ovih naredbi ispravno dodeljuje vrednost 17 promenljivoj
x?
14
13.
Osnovni elementi jezika Java ❍
17 = x;
❍
x = 17;
❍
x := 17;
❍
x == 17;
Kojom se od ovih naredbi ispravno deklari²e promenljiva po£etnom vredno²¢u 17?
14.
15.
16.
❍
int x = ’17’;
❍
int x == 17;
❍
int x = 17;
❍
int x = 17.0;
ta je rezultat izraza
❍
10
❍
11
❍
11:25
❍
12
45 / 4 u Javi?
Koji od ovih izraza kao rezultat daju 0:5 u Javi?
❑
1/2
❑
1.0 / 2
❑
1.0 / 2.0
❑
(double) (1 / 2)
❑
(double) 1 / 2
❑
1 / 2.0
Koji od ovih izraza kao rezultat daje 1 u Javi?
❍
2%1
❍
15 % 4
❍
25 % 5
❍
37 % 6
x tipa int sa
Osnovni elementi jezika Java 17.
Ako su
15
a i b elobrojne promenljive tipa int, koji od ovih izraza u Javi
kao rezultat daju ta£an rezultat (realni broj) za matemati£ki izraz (Na primer, ako su a = 5 i b = 2, onda je
18.
19.
❑
a / b * b
❑
a / (b * b)
❑
1.0 * a / b * b
❑
1.0 * a / (b * b)
❑
(double) a / (b * b)
Koje od ovih naredbi dodele
❑
float f = -34;
❑
int t = 23;
❑
short s = 10;
❑
int t = (int)false;
❑
int t = 4.5;
nisu
a 5 b2 = 4 = 1:25
a b2 ?
ta£an rezultat.)
ispravne?
Koji se tekst dobija na ekranu izvr²avanjem ovog programskog fragmenta?
double x = 5.5; int y = (int)x; System.out.println("x je " + x + " i y je " + y);
20.
❍
x je 5 i y je 6
❍
x je 6.0 i y je 6.0
❍
x je 6 i y je 6
❍
x je 5.5 i y je 5
❍
x je 5.5 i y je 5.0
Koje od ovih naredbi ispravno dodaju 1 elobrojnoj promenljivi
int?
❑
i = i + (2 - 1);
❑
i = i + 1;
❑
i += 1;
i tipa
16
21.
Osnovni elementi jezika Java ❑
i = 1 + i;
❑
i++;
Analizirajte slede¢i program:
public class Test { public static void main(String[] args) { int mesec = 09; System.out.println("Mesec je " + mesec); } }
22.
❍
Program prikazuje
Mesec je 09 na ekranu.
❍
Program prikazuje
Mesec je 9 na ekranu.
❍
Program prikazuje
Mesec je 9.0 na ekranu.
❍
Program ima gre²ku, jer
09 nije ispravno napisana oktalna vrednost.
U Java programu se izvr²avanjem poziva metoda
odmah
prekida izvr²avanje tog programa.
23.
24.
❍
System.terminate(0)
❍
System.halt(0)
❍
System.exit(0)
❍
System.stop(0)
Metod
u Javi izra£unava broj
❍
Math.power(x, y)
❍
Math.exp(x, y)
❍
Math.pow(x, y)
❍
Math.pow(y, x)
x na stepen y.
Koja je od ovih naredbi deklarisanja promenljive ispravna u Javi?
❍
char c = ’A’;
❍
char c = ’23’;
❍
char c = "A";
❍
char c = "23";
Osnovni elementi jezika Java 25.
26.
17
Koje su od ovih naredbi deklarisanja promenljive ispravne u Javi?
❑
string s = ’A’;
❑
String s = ’23’;
❑
String s = "A";
❑
String s = "23";
ta se dodeljuje promenljivoj
c kao rezultat izvr²avanja ovog program-
skog fragmenta?
String s = "Java"; char c = s.charAt(4);
27.
❍
’a’
❍
’v’
❍
Ni²ta, jer dolazi do prekida izvr²avanja programa usled gre²ke.
Ako su
s1 i s2 promenljive tipa String, koji su slu£ajevi ovih naredbi
ili izraza pogre²ni?
28.
❑
String s = "neki string";
❑
String s3 = s1 + s2;
❑
s1 >= s2
❑
int i = s1.length;
❑
s1.charAt(0) = ’?’;
Ako su
s1 i s2 promenljive tipa String, koji su slu£ajevi ovih naredbi
ili izraza pogre²ni?
29.
❑
String s3 = s1 - s2;
❑
s1 == s2
❑
boolean b = s1.compareTo(s2);
❑
char c = s1[0];
❑
char c = s1.charAt(s1.length());
❑
char c = s1.charAt(s1.length() - 1);
Ako su
s1 i s2 promenljive tipa String, ²ta je rezultat ovog izraza?
18
Osnovni elementi jezika Java s1.equals(s2) == s2.equals(s1)
30.
31.
❍
0
❍
1
❍
true
❍
false
ta je rezultat izraza
❍
javaprogram
❍
Java program
❍
Java_program
❍
Javaprogram
❍
gre²ka
Kojim se od ovih naredbi ispravno pretvara string vrednost promenljive
32.
s u elobrojnu
i tipa int?
❑
i = Integer.parseInt(s);
❑
i = (new Integer(s)).intValue();
❑
i = Integer.valueOf(s).intValue();
❑
i = Integer.valueOf(s);
❑
i = (int)(Double.parseDouble(s));
Kojim se od ovih naredbi ispravno pretvara string promenljive
33.
"java" + "program" u Javi?
s u realnu vrednost
d tipa double?
❑
d = Double.parseDouble(s);
❑
d = (new Double(s)).doubleValue();
❑
d = Double.valueOf(s).doubleValue();
❑
d = (double)(Integer.parseInt(s));
Kojim se od ovih naredbi ispravno pretvara realna vrednost promenljive
d tipa double u string s?
❑
s = d;
❑
s = d.toString();
Osnovni elementi jezika Java
34.
35.
36.
37.
19
❑
s = (new Double(d)).toString();
❑
s = (Double.valueOf(d)).toString();
Rela ijski operator manje ili jednako u Javi je
❍
<
❍
=<
❍
>=
❍
0) && (x > 0)
❑
(x > 0) || (x < 0)
❑
(x != 0) || (x = 0)
❑
(-10 < x < 0)
Koji od ovih logi£kih izraza ispravno daje vrednost izmeu 1 i 100 ili je broj
x negativan?
❍
1 < x < 100 && x < 0
❍
((x < 100) && (x > 1)) || (x < 0)
❍
((x < 100) && (x > 1)) && (x < 0)
❍
(x != 0) || (x = 0)
❍
(1 > x > 100) || (x < 0)
❍
(1 < x < 100) || (x < 0)
true ako je broj x
20 38.
Osnovni elementi jezika Java ta je vrednost promenljive
x posle izra£unavanja izraza
(y > 10) && (x++ > 10) ako je pre izra£unavanja tog izraza bilo x = 10 i y = 10?
39.
❍
9
❍
10
❍
11
❍
12
ta je vrednost promenljive
x posle izra£unavanja izraza
(y > 10) || (x++ > 10) ako je pre izra£unavanja tog izraza bilo x = 10 i y = 10?
40.
❍
9
❍
10
❍
11
❍
12
Koju vrednost ima promenljiva
y posle izvr²avanja ovog programskog
fragmenta?
x = 0; y = (x > 0) ? 10 : -10;
10
❍ ❍
0
❍
10
❍
20
❍
Programski fragment ima gre²ku.
Osnovni elementi jezika Java
21
Programski zada i 1.
Napisati program koji u pravougaoniku na ekranu ispisuje va²e ime i prezime na slede¢i na£in:
+----------------+ | | | Dejan Živkovi´ c | | | +----------------+
2.
Napisati program koji na ekranu ispisuje va²e ini ijale velikim slovima koja su na rtana zvezdi ama (znakom
*)
u matri i dimenzije 11
12.
Na primer, na ekranu se za ini ijale D dobija otprilike slede¢a slika:
******* ** ** ** ** ** ** ** ** ** ** ** ** ** ** *******
3.
** ** ** ************ ** ** ** ** ** ** ** ************
Napisati program koji format papira A4 (210
297 mm) prikazuje u
in£ima.
4.
Napisati program koji Celzijusove stepene pretvara u Farenhajtove po formuli f = 9 =5 + 32.
5.
Napisati program koji izra£unava iznos kamate na depozit i uve¢ano stanje depozita nakon jedne godine. Ulazne veli£ine programa su po£etni depozit i godi²nja kamatna stopa, a izlazne veli£ine su nov£ani iznos kamate i uve¢ani depozit nakon jedne godine.
22 6.
Osnovni elementi jezika Java Napisati program koji izra£unava hipotenuzu pravouglog trougla ako su date dve njegove katete. Pored toga, program treba da prikaºe vreme u sekundama koje je utro²eno za obavljanje tog zadatka.
7.
Napisati program koji dati vremenski trenutak izraºen pomo¢u broja godina, mese a, dana, sati i minuta pakuje u jednu promenljivu tipa
int,
zatim prikazuje njenu elobrojnu vrednost i na kraju raspakuje
sadrºaj te promenljive prikazuju¢i originalne podatke o datom vremenskom trenutku.
Glava
4 Upravlja£ke naredbe Pitanja 1.
Kojim se od ovih naredbi ispravno prikazuje povr²ina kruga ako je pre£nik
❑ ❑ ❑ ❑ ❑ ❑ ❑
2.
r pozitivan?
if (r != 0) System.out.println(r * r * Math.PI); if (r >= 0) System.out.println(r * r * Math.PI); if (r > 0) System.out.println(r * r * Math.PI); if (r > 0) { System.out.println(r * r * Math.PI); } if {r > 0} System.out.println(r * r * PI); if (r 0) System.out.println(Math.pow(r, 2) * Math.PI);
Ako je x = 1, y =
1 i
z
= 1, ²ta se prikazuje na ekranu izvr²avanjem
ovog programskog fragmenta?
Savet:
(
najpre ispravno uparite
else delove.) if (x > 0) if (y > 0) System.out.println("x > 0 i y > 0"); else if (z > 0) System.out.println("x < 0 i z > 0");
❍
x > 0 i y > 0 23
if i
24
3.
Upravlja£ke naredbe ❍
x < 0 i z > 0
❍
x < 0 i z < 0
❍
Ni²ta se ne prikazuje.
Analizirajte slede¢i programski fragment:
boolean taˇ cno = false; if (taˇ cno = true) System.out.println("To je taˇ cno!");
❍
Programski fragment ima gre²ku i ne moºe se izvr²iti.
❍
Programski fragment se normalno izv²ava, ali se ni²ta ne prikazuje na ekranu.
❍
Programski fragment se normalno izv²ava i prikazuje se
To je taˇ cno!
na ekranu.
4.
Ako je
broj elobrojna promenljiva tipa int, analizirajte slede¢a dva
ekvivalentna programska fragmenta A i B: Fragment A:
boolean paranBroj; if (broj % 2 == 0) paranBroj = true; else paranBroj = false;
5.
Fragment B:
boolean paranBroj = (broj % 2 == 0);
❍
Fragment A ima gre²ku.
❍
Fragment B ima gre²ku.
❍
Oba fragmenta imaju gre²ku.
❍
Oba fragmenta su ispravna, ali je fragment B bolji.
Ako elobrojna promenljiva
plata sadrºi vrednost 4001, ²ta ¢e biti
prikazano na ekranu posle izvr²avanja ovog programskog fragmenta?
if (plata > 3000) System.out.println("Plata je ve´ ca od 3000"); else if (plata > 4000) System.out.println("Plata je ve´ ca od 4000");
Upravlja£ke naredbe ❍
Ni²ta se ne¢e prikazati.
❍
Plata je ve´ ca od 3000
❍
Plata je ve´ ca od 4000
❍
25
Plata je ve´ ca od 3000 u jednom redu i Plata je ve´ ca od 4000 u slede¢em redu.
6.
ta se prikazuje na ekranu kao rezultat izvr²avanja ovog programskog fragmenta?
double faktor = 1.5; double cena = 0.0; if ((faktor >= 0.0) && (faktor < 1.0)) cena = 20 * faktor; else if ((faktor >= 1.0) && (faktor < 1.5)) cena = 15 * faktor; else if (faktor >= 1.5) cena = 10 * faktor; System.out.println("cena = " + cena);
7.
❍
cena = 0.0
❍
Ni²ta se ne¢e prikazati.
❍
Programski fragment ima gre²ku i ne¢e se izvr²iti.
❍
cena = 15.0
ta se prikazuje na ekranu kao rezultat izvr²avanja ovog programa?
public class Test { public static void main(String[] args) { String s1 = "Java"; String s2 = s1; if (s1 == s2) System.out.println( "s1 i s2 ukazuju na isti string"); else System.out.println( "s1 i s2 ukazuju na razliˇ cite stringove"); } }
❍
Ni²ta se ne prikazuje.
26
8.
Upravlja£ke naredbe ❍
s1 i s2 ukazuju na isti string
❍
s1 i s2 ukazuju na razliˇ cite stringove
ta se prikazuje na ekranu kao rezultat izvr²avanja ovog programa?
public class Test { public static void main(String[] args) { String s1 = "Java"; String s2 = new String("Java"); if (s1 == s2) System.out.println( "s1 i s2 ukazuju na isti string"); else System.out.println( "s1 i s2 ukazuju na razliˇ cite stringove"); } }
9.
❍
Ni²ta se ne prikazuje.
❍
s1 i s2 ukazuju na isti string
❍
s1 i s2 ukazuju na razliˇ cite stringove
ta se prikazuje na ekranu kao rezultat izvr²avanja ovog programa?
public class Test { public static void main(String[] args) { String s1 = "Java"; String s2 = s1; if (s1.equals(s2)) System.out.println("s1 i s2 imaju isti sadržaj"); else System.out.println("s1 i s2 imaju razliˇ cit sadržaj"); } }
10.
❍
Ni²ta se ne prikazuje.
❍
s1 i s2 imaju isti sadržaj
❍
s1 i s2 imaju razliˇ cit sadržaj
ta se prikazuje na ekranu kao rezultat izvr²avanja ovog programa?
Upravlja£ke naredbe
27
public class Test { public static void main(String[] args) { String s1 = "Java"; String s2 = "Java"; if (s1.equals(s2)) System.out.println("s1 i s2 imaju isti sadržaj"); else System.out.println("s1 i s2 imaju razliˇ cit sadržaj"); } }
11.
❍
Ni²ta se ne prikazuje.
❍
s1 i s2 imaju isti sadržaj
❍
s1 i s2 imaju razliˇ cit sadržaj
ta se prikazuje na ekranu kao rezultat izvr²avanja ovog programa?
public class Test { public static void main(String[] args) { String s1 = "Java"; String s2 = s1.toUpperCase(); if (s1 == s2) System.out.println("s1 i s2 ukazuju na isti string"); else if (s1.equals(s2)) System.out.println("s1 i s2 imaju isti sadržaj"); else System.out.println("s1 i s2 imaju razliˇ cit sadržaj"); } }
12.
❍
Ni²ta se ne prikazuje.
❍
s1 i s2 ukazuju na isti string
❍
s1 i s2 imaju isti sadržaj
❍
s1 i s2 imaju razliˇ cit sadržaj
Koju vrednost ima promenljiva fragmenta?
int x = 3, y = 3; switch (x + 3) {
y posle izvr²avanja ovog programskog
28
Upravlja£ke naredbe case 6: y = 0; case 7: y = 1; default: y = y + 1; }
13.
❍
1
❍
2
❍
3
❍
4
ta se prikazuje na ekranu kao rezultat izvr²avanja ovog programskog fragmenta?
char ch = ’a’; switch (ch) { case ’a’: case ’A’: System.out.print(ch); break; case ’b’: case ’B’: System.out.print(ch); break; case ’c’: case ’C’: System.out.print(ch); break; case ’d’: case ’D’: System.out.print(ch); }
14.
❍
abcd
❍
a
❍
aA
❍
A
ta se prikazuje na ekranu kao rezultat izvr²avanja ovog programskog fragmenta?
int ocena = 15; switch (ocena) { case 0 : System.out.println("ocena je 0"); break;
Upravlja£ke naredbe case 15 : System.out.println("ocena je case 30 : System.out.println("ocena je break; case 40 : System.out.println("ocena je default : System.out.println("Pograšna
29
15"); 15 ili 30");
40"); ocena");
}
15.
❍
ocena je 15
❍
ocena je 15 u jednom redu i ocena je 15 ili 30 u slede¢em redu.
❍
Ni²ta se ne¢e prikazati.
❍
Pograšna ocena
Analizirajte slede¢i programski fragment:
int x; double d = 1.5; switch (d) { case 1.0: x = 1; case 1.5: x = 2; case 2.0: x = 3; }
❍
Programski fragment ima gre²ku, jer nedostaju potrebne naredbe
break.
❍
Programski fragment ima gre²ku, jer nedostaje slu£aj naredbi
❍
16.
switch.
Programski fragment ima gre²ku, jer kontrolna promenljiva naredbi
❍
default u d u
switch ne moºe biti tipa double.
Programski fragment nema gre²aka.
ta se prikazuje na ekranu kao rezultat izvr²avanja ovog programskog fragmenta?
int k = 20; while (k > 0) System.out.println(k);
30
17.
Upravlja£ke naredbe ❍
Programski fragment ima gre²ku i ne¢e se izvr²iti.
❍ ❍ ❍
20 Ni²ta se ne¢e prikazati. Stalno ¢e se prikazivati
20 u beskona£noj petlji.
Koliko puta se na ekranu prikazuje tekst
Kako ste? kao rezultat izvr-
²avanja ovog programskog fragmenta?
int brojaˇ c = 0; while (brojaˇ c < 10) { System.out.println("Kako ste?"); brojaˇ c++; }
18.
❍ ❍ ❍
9
❍
0
10 11
Analizirajte slede¢i programski fragment:
int brojaˇ c = 0; // Taˇ cka A while (brojaˇ c < 10) { System.out.println("Kako ste?"); brojaˇ c++; // Taˇ cka B } // Taˇ cka C
19.
❑ ❑ ❑ ❑
Uslov
brojaˇ c < 10 je uvek ta£an u ta£ki A.
Uslov
brojaˇ c < 10 je uvek neta£an u ta£ki A.
Uslov
brojaˇ c < 10 je uvek ta£an u ta£ki B.
Uslov
brojaˇ c < 10 je uvek neta£an u ta£ki B.
❑ ❑
Uslov
brojaˇ c < 10 je uvek ta£an u ta£ki C.
Uslov
brojaˇ c < 10 je uvek neta£an u ta£ki C.
Koliko puta se na ekranu prikazuje tekst ²avanja ovog programskog fragmenta?
Kako ste? kao rezultat izvr-
Upravlja£ke naredbe
31
int brojaˇ c = 0; do { System.out.println("Kako ste?"); brojaˇ c++; } while (brojaˇ c < 10);
20.
❍
9
❍
10
❍
11
❍
0
ta se prikazuje na ekranu kao rezultat izvr²avanja ovog programskog fragmenta?
int i = 1; do { i++; } while(i < 5); System.out.println("i = " + i);
21.
❍
Programski fragment ima gre²aku i ne¢e se izvr²iti.
❍
i = 5
❍
Ni²ta se ne¢e prikazati.
❍
Stalno ¢e se prikazivati
i = 1 u beskona£noj petlji.
Analizirajte slede¢i programski fragment:
double suma = 0; for ( double d = 0; d < 10; ) { d = d + 0.1; suma = suma + d; }
❍
Programski fragment ima gre²ku, jer nedostaje tre¢i deo (zavr²ni a) u zagradama
❍
for petlje.
Programski fragment ima gre²ku, jer kontrolna promenljiva zagradama
for petlje ne moºe biti tipa double. d < 10 uvek ta£an, for petlja je beskona£na.
❍
Po²to je uslov
❍
Programski fragment nema gre²aka i normalno se izvr²ava.
d u
32 22.
Upravlja£ke naredbe ta se prikazuje na ekranu kao rezultat izvr²avanja ovog programskog fragmenta?
int suma = 0; for (int i = 0; i < 10; i++) { suma = suma + i; } System.out.println(suma);
❍ ❍ ❍ ❍ ❍
23.
10 11 12 13 45
Da li su ove dve promenljive
for petlje ekvivalentne u smislu da daju istu vrednost
suma nakon izvr²avanja?
for (int i = 0; i < 10; ++i) { suma = suma + i; }
❍ ❍
24.
Da. Ne.
Da li je ova
for ( ;
❍ ❍
25.
for (int i = 0; i < 10; i++) { suma = suma + i; }
for petlja sintaksno ispravna? ;
) ;
Da. Ne.
Analizirajte slede¢i program:
public class Test { public static void main (String args[]) { int i = 0; for (i = 0; i < 10; i++); System.out.println(i + 4); } }
Upravlja£ke naredbe ❑
Program se ne¢e izvr²iti, jer se ta£ka-zapeta nalazi odmah iza zagrada
❑ ❑ ❑
33
for petlje.
Program ¢e se bez problema izvr²iti i prikaza¢e se
4 na ekranu.
Program ¢e se bez problema izvr²iti i prikaza¢e se
14 na ekranu.
U programu je
for petlja ekvivalentna sa ovom for petljom:
for (i = 0; i < 10; i++) { };
26.
Da li ¢e izvr²avanje ovog programskog fragmenta biti beskona£no?
int stanje = 10; while (true) { if (stanje < 9) break; stanje = stanje - 9; }
❍ ❍
27.
Da. Ne.
Koju vrednost ima promenljiva
suma posle izvr²avanja ovog program-
skog fragmenta?
int suma = 0; int i = 0; do { i++; suma = suma + i; if (suma > 4) break; } while (i < 5);
❍ ❍ ❍ ❍
28.
5 6 7 8
Da li ¢e izvr²avanje ovog programskog fragmenta biti beskona£no?
int stanje = 10; while (true) { if (stanje < 9) continue; stanje = stanje - 9; }
34
Upravlja£ke naredbe ❍ ❍
29.
Da. Ne.
ta se prikazuje na ekranu kao rezultat izvr²avanja ovog programskog fragmenta?
int x = 5, y = 20; while (y > 1) { y--; if (y % x != 0) continue; System.out.print(y + " "); } System.out.println();
❍ ❍ ❍ ❍
30.
20 19 18 17 16 20 15 10 5 15 10 5 0 15 10 5
Koja je slede¢a naredba koja se izvr²ava nakon izvr²avanja naredbe
break spetlja u ovom programskom fragmentu? spetlja: for (int i = 1; i < 10; i++) { upetlja: for (int j = 1; j < 10; j++) { if (i * j > 50) break spetlja; System.out.println(i * j); } } nastavak: . . .
❍ ❍ ❍ ❍
31.
Naredba sa oznakom
spetlja.
Naredba sa oznakom
upetlja.
Naredba sa oznakom
nastavak.
Nijedna naredba, nego se program odmah zavr²ava.
Koja je slede¢a naredba koja se izvr²ava nakon izvr²avanja naredbe
continue spetlja u ovom programskom fragmentu?
Upravlja£ke naredbe
35
spetlja: for (int i = 1; i < 10; i++) { upetlja: for (int j = 1; j < 10; j++) { if (i * j > 50) continue spetlja; System.out.println(i * j); // Taˇ cka A } // Taˇ cka B } nastavak: . . .
❍
Kontrola se prenosi u ta£ku B radi izvr²avanja slede¢e itera ije spolja²nje petlje sa oznakom
❍
spetlja.
Kontrola se prenosi u ta£ku A radi izvr²avanja slede¢e itera ije unutra²nje petlje sa oznakom
upetlja.
nastavak.
❍
Naredba sa oznakom
❍
Nijedna naredba, nego se program odmah zavr²ava.
36
Upravlja£ke naredbe
Programski zada i 1.
Uskrs je pokretan rkveni praznik koji uvek pada u nedelju.
Ta£an
datum katoli£kog Uskrsa u godini izmeu 1982. i 2048. godine dobija se na osnovu slede¢eg postupka: 1) A je godina po modulu 19 2) B je godina po modulu 4 3) C je godina po modulu 7 4) D je (19A + 24) po modulu 30 5) E je (2B + 4C + 6D + 5) po modulu 7 6) Uskrs je (22 + D + E ). marta ili, ako je 22 + D + E > 31, to je (22 + D + E
31). aprila
Napisati program koji prikazuje datum katoli£kog Uskrsa za datu godinu izmeu 1982. i 2048. godine.
2.
Postupak za izra£unavanje datuma katoli£kog Uskrsa u prethodnom zadatku moºe se lako pro²iriti za sve godine izmeu 1900. i 2099. godine.
Naime, u slu£aju £etiri godine, 1954., 1981., 2049. i 2076.,
prethodna formula daje datum koji je 7 dana kasniji nego ²to treba da bude.
Modikujte program iz prethodnog zadatka tako da prikazuje
datum katoli£kog Uskrsa za datu godinu izmeu 1900. i 2099. godine. (Napomena: u £etiri posebne godine, oduzimanje 7 dana od datuma Uskrsa dobijenog po prvobitnoj formuli ne dovodi do promene mese a.)
3.
Napisati program koji simulira ba anje nov£i¢a dati broj puta.
Pro-
gram treba da u£ita ºeljeni broj ba anja nov£i¢a i da prikaºe brojeve koliko puta je palo pismo i glava, kao i njihov koli£nik sa brojem ba anja. Program treba da ponavlja ekperiment sve dok se ne u£ita 0 za broj ba anja.
4.
Napisati program koji simulira eksperiment ba anja dve ko ke za igru i odreuje koliko puta treba ba iti par ko ki dok na obe ko ke ne padne istovremeno vrednost 1. (Ina£e, ko karski termin za ovaj ishod je zmijske o£i.) Program treba da prikaºe vrednosti ko ki pri svakom ba anju i da na kraju prikaºe ukupan broj ba anja ko ki.
Upravlja£ke naredbe 5.
37
Niz brojeva za 3n + 1 problem po£inje od datog elog broja n, dok se svaki slede¢i broj niza dobija na slede¢i na£in: ako je n paran broj, onda je to broj n podeljen sa 2; a ako je n neparan broj, onda je to broj n pomnoºen sa 3 plus 1. Ovaj postupak za slede¢i broj niza se ponavlja sve dok se ne dobije 1. Na primer, ako je po£etno dato n = 3, s obzirom da je 3 neparan broj, slede¢i broj niza je 3
3 + 1 = 10.
Kako je 10 paran broj, slede¢i broj niza je 10=2 = 5. Dalje, kako je 5 neparan broj, slede¢i broj niza je 3
5 + 1 = 16.
Nije te²ko proveriti
da, nastavljaju¢i ovaj postupak sve dok se ne dobije 1, kompletan niz za dati po£etni broj 3 jeste 3; 10; 5; 16; 8; 4; 2; 1. Napisati program koji za dati po£etni broj n prikazuje niz brojeva za 3n + 1 problem.
6.
Napisati program koji izra£unava najve¢i zajedni£ki delila dva ela broja koriste¢i postupak traºenja njihovog zajedni£kog delio a po£ev²i od manjeg od njih.
7.
Napisati program koji odreuje koji eo broj izmeu 1 i datog broja n ima najve¢i broj delio a i koliki je taj broj delio a.
(Mogu¢e je da
vi²e brojeva u ovom intervalu imaju isti, najve¢i broj delio a. Program treba da prikaºe samo jedan od njih.)
8.
Napisati program koji zvezdi ama (znakom
*) rta geometrijsku
guru
romb. Broj redova romba je ulazni podatak programa i ukoliko je to paran broj, treba ga zaokruºiti na prvi ve¢i neparan broj. Na primer, ako je broj redova romba 11, na ekranu se dobija slede¢a slika:
* *** ***** ******* ********* *********** ********* ******* ***** *** *
38 9.
Upravlja£ke naredbe Napisati program koji u£itava jedan red teksta i redom prikazuje njegove znakove broje¢i pri tome broj slova i ifara koji se pojavljuju.
10.
Napisati program koji u£itava jedan red teksta i deli ga po re£ima. Na primer, ako je ulazni red:
Profesor reˇ ce: "Student je položio ispit". na ekranu se kao rezultat dobija:
Profesor reˇ ce Student je položio ispit Jedna re£ je niz susednih slova u ulaznom redu i treba da bude prikazana u posebnom redu. Svaki znak koji nije slovo u ulaznom redu se zanemaruje.
Glava
5 Metodi Pitanja 1.
Ako metod ne vra¢a nijednu vrednost, koja se sluºbena re£ koristi za njegov tip rezultata u deni iji tog metoda?
2.
3.
❍
void
❍
return
❍
public
❍
static
Potpis metoda se sastoji od
.
❍
imena metoda
❍
imena metoda i liste parametara
❍
tipa rezultata, imena metoda i liste parametara
❍
liste parametara
Analizirajte slede¢i metod:
protected double na¯ di(int x, int y, boolean b) { // . . . }
39
40
4.
5.
6.
Metodi ❑
Ime metoda je
protected.
❑
Ime metoda je
na¯ di.
❑
Tip rezultata metoda je
int.
❑
Tip rezultata metoda je
boolean.
❑
Tip rezultata metoda je
double.
❑
Broj parametara metoda je tri.
❑
Broj parametara metoda je ²est.
Svi Java programi moraju imati bar jedan metod
❍
public static Main(String[] args)
❍
public static Main(String args[])
❍
public void main(String[] args)
❍
public static void main(String[] args)
❍
public static main(String[] args)
Argumenti pri pozivanju metoda se navode unutar
❍
uglastih (srednjih) zagrada
❍
obi£nih (malih) zagrada
❍
viti£astih (velikih) zagrada
❍
dvostrukih apostrofa
❍
jednostrukih apostrofa
.
.
Vrednosti argumenata u pozivu metoda se prenose odgovaraju¢im parametrima metoda. Kako se naziva ovaj na£in preno²enja argumenata u Javi?
7.
❍
pozivanje metoda.
❍
preno²enje po vrednosti.
❍
preno²enje po referen i.
❍
preno²enje po imenu.
Koja se naredba koristi unutar tela nekog metoda za povratak iz tog metoda i vra¢anje rezultata tog metoda?
Metodi
8.
❍
void
❍
return
❍
public
❍
static
Da li naredba
41
return u ovom metodu dovodi do gre²ke?
public static void main(String[] args) { int max = 0; if (max != 0) System.out.println(max); else return; }
9.
❍
Da.
❍
Ne.
Da li poziv metoda
Math.pow() u ovom metodu dovodi do gre²ke?
public static void main(String[] args) { Math.pow(2, 4); }
10.
❍
Da.
❍
Ne.
ta je rezultat poziva
nPrint("a", 4) ukoliko je metod nPrint() de-
nisan na ovaj na£in?
void nPrint(String poruka, int n) { while (n > 0) { System.out.print(poruka); n--; } }
❍
Na ekranu se prikazuje
aaaaa.
❍
Na ekranu se prikazuje
aaaa.
❍
Na ekranu se prikazuje
aaa.
42
11.
Metodi ❍
Na ekranu se prikazuje
aa.
❍
Na ekranu se prikazuje
a.
Ukoliko je metod
nPrint() denisan na slede¢i na£in:
void nPrint(String poruka, int n) { while (n > 0) { System.out.print(poruka); n--; } } koju vrednost ima promenljiva
k posle izvr²avanja ovog programskog
fragmenta?
int k = 2; nPrint("Java je kul!", k);
12.
❍
0
❍
1
❍
2
❍
3
Analizirajte slede¢i program:
public class Test { public static void main(String[] args) { System.out.println(xMetod(5)); } public double xMetod(int n, double t) { System.out.println("double"); return t; } public int xMetod(int n) { System.out.println("int"); return n; } }
❍
Program na ekranu prikazuje
int i zatim 5.
Metodi
43
❍
Program na ekranu prikazuje
double i zatim 5.
❍
Program na ekranu prikazuje
double.
❍
Program na ekranu prikazuje
int.
❍
Program ima gre²ku, jer se ne moºe odrediti koju verziju preoptere¢enog metoda
13.
xMetod() treba pozvati.
Analizirajte slede¢i program:
public class Test { public static void main(String[] args) { System.out.println(m(2)); } public int m(int n) { return n; } public void m(int n) { System.out.println(n); } }
❍
Program ima gre²ku, jer se ne moºe odrediti koju verziju preoptere¢enog metoda
❍
m() treba pozvati.
Program ima gre²ku, jer je druga verzija preoptere¢enog metoda
m() denisana ali se nigde ne poziva.
14.
15.
❍
Program se normalno izvr²ava i prikazuje
2 jedanput.
❍
Program se normalno izvr²ava i prikazuje
2 dvaput.
Kako se naziva promenljiva koja je deklarisana unutar nekog metoda?
❍
globalna promenljiva
❍
stati£ka promenljiva
❍
blokovska promenljiva
❍
lokalna promenljiva
Koju vrednost ima promenljiva
k posle izvr²avanja ovog bloka?
44
Metodi { int k = 2; nPrint("Java je kul!", k); }
16.
❍
0
❍
1
❍
2
❍
Promenljiva
k nije denisana izvan tog bloka.
Koje su od ovih re£eni a o rekurzivnim metodima ta£ne?
❑
Rekurzivni metodi su oni koji pozivaju sami sebe, bilo direktno ili indirektno.
❑
Rekurzivni metodi se pozivaju druga£ije od nerekurzivnih metoda.
❑
Rekurzivni metodi re²avaju neki zadatak svoenjem polaznog problema na sli£an prostiji problem (ili vi²e njih).
❑
Svaki rekurzivni metod mora imati
bazni slu£aj
za najprostiji za-
datak £ije se re²enje ne dobija rekurzivnim pozivom.
17.
Analizirajte slede¢i rekurzivni metod:
public long faktorijel(int n) { return n * faktorijel(n - 1); }
❍
Rezultat poziva
faktorijel(3) je 2.
❍
Rezultat poziva
faktorijel(3) je 3.
❍
Rezultat poziva
faktorijel(3) je 6.
❍
Poziv
faktorijel(3) izaziva gre²ku po²to proizvodi beskona£an la-
na poziva istog metoda
18.
faktorijel().
Analizirajte slede¢i program:
public class Test { public static void main(String[] args) { int[] x = {1, 2, 3, 4, 5}; rMetod(x, 5); }
Metodi
45
public static void rMetod(int[] x, int n) { System.out.print(x[n - 1] + " "); rMetod(x, n - 1); } }
❍
Program na ekranu prikazuje
1 2 3 4 5.
❍
Program na ekranu prikazuje
1 2 3 4 5 i zatim gre²ku o prekora£e-
nju grani a indeksa niza
❍
Program na ekranu prikazuje
5 4 3 2 1.
❍
Program na ekranu prikazuje
5 4 3 2 1 i zatim gre²ku o prekora£e-
nju grani a indeksa niza
19.
x.
x.
Analizirajte slede¢i program:
public class Test { public static void main(String[] args) { rMetod(3); } public static void rMetod(int n) { if (n > 1) { System.out.print((n - 1) + " "); rMetod(n - 1); } } }
20.
❍
Program proizvodi beskona£an lana poziva istog metoda
❍
Program na ekranu prikazuje
1 2 3.
❍
Program na ekranu prikazuje
3 2 1.
❍
Program na ekranu prikazuje
1 2.
❍
Program na ekranu prikazuje
2 1.
Analizirajte slede¢i program:
public class Test { public static void main(String[] args) { rMetod(2); }
rMetod().
46
Metodi
public static void rMetod(int n) { while (n > 1) { System.out.print((n - 1) + " "); rMetod(n - 1); } } }
21.
❍
Program na ekranu ne prikazuje ni²ta.
❍
Program na ekranu prikazuje
1 2.
❍ ❍
Program na ekranu prikazuje
2 1.
Program na ekranu beskona£no prikazuje
1 1 1 1 1
: : :.
❍
Program na ekranu beskona£no prikazuje
2 2 2 2 2
: : :.
Analizirajte slede¢i rekurzivni metod:
public int rMetod(int n) { if (n == 1) return 1; else return n + rMetod(n - 1); }
22.
❍
Pozivom
rMetod(5) se isti metod rMetod() poziva jo² 3 puta.
❍
Pozivom
rMetod(5) se isti metod rMetod() poziva jo² 4 puta.
❍
Pozivom
rMetod(5) se isti metod rMetod() poziva jo² 5 puta.
❍
Pozivom
rMetod(5) se isti metod rMetod() poziva jo² 6 puta.
Analizirajte slede¢i rekurzivni metod:
public int rMetod(int n) { if (n == 1) return 1; else return n + rMetod(n - 1); }
❍
Rezultat poziva
rMetod(5) je 5.
❍
Rezultat poziva
rMetod(5) je 10.
❍
Rezultat poziva
rMetod(5) je 15.
Metodi ❍
47
Poziv
rMetod(5) proizvodi beskona£an lana poziva istog metoda
rMetod().
23.
ta je bazni slu£aj u ovom rekurzivnom metodu?
public int rMetod(int n) { if (n == 1) return 1; else return n + rMetod(n - 1); }
24.
1.
❍
n je
❍
n je manje od
❍
n je ve¢e od
❍
Nema baznog slu£aja.
1.
1.
Dopunite 4. red slede¢eg rekurzivnog metoda za odreivanje da li je neki string palindrom:
1 2 3 4 5 6 7 8
25.
public static boolean palindrom(String s) { if (s.length() desniKraj) // broj nije na¯ den u nizu return -1; // Pretraživanje prve ili druge polovine niza int sredina = (leviKraj + desniKraj) / 2; if (broj < niz[sredina]) return na¯ diBroj(niz, broj, leviKraj, sredina - 1); else if (broj > niz[sredina]) return ; else return sredina; }
❍
na¯ diBroj(niz, broj, sredina + 1, leviKraj)
❍
na¯ diBroj(niz, broj, sredina - 1, leviKraj)
❍
na¯ diBroj(niz, broj, desniKraj, sredina + 1)
❍
na¯ diBroj(niz, broj, sredina + 1, desniKraj)
50
Metodi
Programski zada i 1.
Napisati metod
NZD()
koji izra£unava najve¢i zajedni£ki delila dva
ela broja koriste¢i Euklidov algoritam. se u metodu
main()
u£itavaju dva ela broja i prikazuje njihov najve¢i
zajedni£ki delila pozivom metoda
2.
Napisati metod
Testirati taj metod tako ²to
triN1()
NZD().
koji prikazuje niz brojeva za 3n + 1 problem
(videti 5. zadatak iz glave 4). Testirati taj metod tako ²to se u metodu
3.
main()
u£itava po£etni broj niza i prikazuje ostatak tog niza pozivom
metoda
triN1().
Napisati metod
kapitalizuj()
koji po£etno slovo svake re£i datog
stringa pretvara u veliko slovo. Testirati taj metod tako ²to se u metodu
main()
u£itava jedan red teksta i prikazuje njegova kapitalizovana
verzija pozivom metoda
4.
kapitalizuj().
Heksadekadne ifre su dekadne ifre od 0 do 9 i slova A, B , C , D , E i F . U heksadekadnom sistemu ovi znakovi predstavljaju vrednosti od
0 redom do 15. Napisati metod
heksVrednost()
koji daje heksadekadnu vrednost da-
tog znaka. Ako parametar tog metoda nije jedan od dozvoljenih znakova, vra¢ena vrednost treba da bude
1.
Heksadekadni broj je niz heksadekadnih ifara kao ²to su 34A7, F F , ABC D ili
172300. Napisati program koji u£itava heksadekadni broj i
prikazuje dekadnu vrednost tog broja koriste¢i metod
heksVrednost().
Ako svi znakovi heksadekadnog broja nisu dozvoljene heksadekadne
ifre, program treba da prikaºe odgovaraju¢u poruku o gre² i.
5.
Napisati metod
baciZaZbir()
koji simulira ba anje dve ko ke za igru
dok njihov zbir ne padne jednak datom mogu¢em broju od 2 do 12. Rezultat ovog metoda treba da bude broj ba anja koji je izvr²en dok se nije desio ºeljeni ishod. Napisati drugi metod
prosekZaZbir()
koji koristi metod
baciZaZbir()
za ponavljanje 100000 puta eksperimenta ba anja dve ko ke dok se ne
Metodi
51
dobije dati zbir. Parametar metoda je ºeljeni zbir svakog ba anja, a rezultat metoda je prose£an broj ba anja koji se dobija za taj zbir u
100000 poku²aja. Na kraju, napisati metod
main()
koji poziva metod
prosekZaZbir()
za svaki mogu¢i zbir od 2 do 12 i rezultate prikazuje u tabeli slede¢eg oblika:
Zbir dve kocke -------------2 3 4 . . .
Proseˇ can broj bacanja --------------------35.87 18.08 11.95 . . .
Glava
6 Klase i objekti Pitanja 1.
2.
3.
je ²ablon za konstruisanje objekata istog tipa.
❍
Objekat
❍
Metod
❍
Promenljiva
❍
Klasa
lanovi klase (polja i metodi) mogu biti
❍
stati£ki (klasni) i nestati£ki (objektni)
❍
lokalni i globalni
❍
pro eduralni i nepro eduralni
❍
spolja²nji i unutra²nji
Za denisanje klase se koristi sluºbena re£
❍
method
❍
class
❍
main
❍
object 53
.
.
54 4.
Klase i objekti Kako se naziva spe ijalni metod neke klase koji se poziva prilikom konstruisanja svakog objekta te klase?
5.
❍
Glavni metod
❍
Metod bez argumenata
❍
Konstruktor
❍
Rekurzivni metod
Koje su od ovih re£eni a o konstruktorima ta£ne?
❑
Podrazumevani konstruktor bez argumenata se automatski dodaje ukoliko u klasi nije ekspli itno denisan nijedan konstruktor.
❑
U klasi se mora ekspli itno denisati bar jedan konstruktor.
❑
Konstruktori nemaju tip rezultata, £ak ni
❑
Konstruktori moraju imati isto ime kao klasa u kojoj se deni²u.
❑
Konstruktori se pozivaju koriste¢i operator
void.
new kada se konstrui²e
objekat.
6.
Analizirajte slede¢i program koji se sastoji od dve klase u jednoj datote i:
public class Test { public static void main(String[] args) { A a = new A(); a.prikaži(); } } class A { String s; public A(String s) { this.s = s; } public void prikaži() { System.out.println(s); } }
❑
Program ima gre²ku, jer klasa
A nije javna klasa.
❑
Program ima gre²ku, jer klasa
A nema podrazumevani konstruktor.
Klase i objekti ❑
55
Program nema gre²aka i normalno se izvr²ava ni²ta ne prikazuju¢i na ekranu.
❑
Program ima gre²ku koja se moºe ispraviti ukoliko se naredba
A a =
new A(); u metodu main promeni u naredbu A a = new A("poruka");.
7.
Analizirajte slede¢i program koji se sastoji od dve klase u jednoj datote i:
public class Test { public static void main(String[] args) { B c = new B(2); } } class B { int i; public void b(int j) { i = j; } }
❍
Program ima gre²ku, jer klasa
B nije javna klasa.
❍
Program ima gre²ku, jer klasa
B nema podrazumevani konstruktor.
❍
Program ima gre²ku, jer klasa
B nema konstruktor sa parametrom
tipa
❍
int.
Program nema gre²aka i normalno se izvr²ava ni²ta ne prikazuju¢i na ekranu.
8.
Ako je data deklara ija
Krug k = new Krug(), koja je od ovih re£eni a
najta£nija?
9.
k sadrºi elobrojnu vrednost.
❍
Promenljiva
❍
Promenljivoj
❍
Promenljiva
k sadrºi objekat klase Krug.
❍
Promenljiva
k sadrºi referen u na objekat klase Krug.
k se moºe dodeliti elobrojna vrednost.
Analizirajte slede¢i program:
56
Klase i objekti public class Test { int x; public Test(String s) { System.out.println("Test"); } public static void main(String[] args) { Test t = null; System.out.println(t.x); } }
❍
Program ima gre²ku, jer promenljiva
t nije ini ijalizovana.
❍
Program ima gre²ku, jer promenljiva
x nije ini ijalizovana.
❍
Program ima gre²ku, jer klasa
Test nema podrazumevani konstruk-
tor.
❍
Program ima gre²ku, jer se u nekoj klasi ne moºe deklarisati promenljiva tipa te iste klase kao ²to je to ovde slu£aj sa promenljivom
t.
❍
Program ima gre²ku, jer promenljiva prikazuje polje
❍
t ima vrednost null kada se
t.x.
Program nema gre²aka i normalno se izvr²ava ni²ta ne prikazuju¢i na ekranu.
10.
Automatske po£etne vrednosti za polja logi£kog, numeri£kog i klasnog tipa svakog objekta su, redom,
11.
❍
true, 1, null
❍
false, 0, null
❍
true, 0, null
❍
false, 1, null
❍
false, 0, void
.
Koje su od ovih re£eni a o promenljivima ta£ne?
❑
Lokalne promenljive ne dobijaju automatski po£etne vrednosti.
❑
Polja objekata dobijaju automatski po£etne vrednosti.
Klase i objekti ❑
57
Promenljiva nekog primitivnog tipa sadrºi vrednost tog primitivnog tipa.
❑
Promenljiva nekog klasnog tipa ukazuje na memorijsku adresu u kojoj se nalazi objekat klase.
❑
Celobrojna vrednost koja predstavlja vaºe¢u memorijsku adresu moºe se dodeliti promenljivoj klasnog tipa.
12.
Analizirajte slede¢i program:
public class Test { public static void main(String[] args) { double preˇ cnik; final double PI= 3.15169; double površina = preˇ cnik * preˇ cnik * PI; System.out.println("Površina je " + površina); } }
13.
❍
Program ima gre²ku, jer promenljiva
preˇ cnik nije ini ijalizovana.
❍
Program ima gre²ku, jer je konstanta
PI denisana unutar metoda.
❍
Program ima gre²ku, jer konstanta
PI ima previ²e de imala.
❍
Program ima gre²ku, jer konstanta
PI ima premalo de imala.
❍
Program nema gre²aka i normalno se izvr²ava.
Analizirajte slede¢i program:
public class Test { int x; public Test(String s) { System.out.println("Test"); } public static void main(String[] args) { Test t = new Test(); System.out.println(t.x); } }
58
Klase i objekti ❍
Program ima gre²ku, jer se metod
System.out.println() ne moºe
koristiti u konstruktoru klase.
❍ ❍
Program ima gre²ku, jer promenljiva Program ima gre²ku, jer klasa
x nije ini ijalizovana.
Test nema podrazumevani konstruk-
tor.
❍
Program ima gre²ku, jer se u nekoj klasi ne moºe konstruisati objekat te iste klase.
❍
14.
Program nema gre²aka i normalno se izvr²ava prikazuju¢i
0 na ekranu.
Koja je od ovih re£eni a o objektima najta£nija?
15.
❍
Objektna promenljiva sadrºi neki objekat.
❍
Promenljiva klasnog tipa sadrºi neki objekat.
❍
Neki objekat moºe sadrºati druge objekte.
❍
Neki objekat moºe sadrºati referen e na druge objekte.
Koja su polja zajedni£ka i jedinstvena za sve objekte neke klase?
16.
❍
Javna
❍
Privatna
❍
Objektna (instan na)
❍
Stati£ka (klasna)
Da li se stati£ko polje neke klase moºe koristiti bez konstruisanja ijednog objekta te klase?
17.
❍
Da.
❍
Ne.
U kojem redu treba zameniti znak
? sluºbenom re£ju static u deni iji
ove klase?
1 2 3 4 5 6
public class Test { private int broj; public ? int kvadrat(int n) { return n * n;
Klase i objekti 7 8 9 10 11 12
18.
} public ? int getBroj() { return broj; } }
❍
U redu 5.
❍
U redu 9.
❍
U oba reda 5 i 9.
❍
U nijednom redu.
Metod koji se pridruºuje svakom pojedina£nom objektu neke klase naziva se
19.
59
❍
stati£ki metod
❍
klasni metod
❍
objektni metod
❍
glavni metod
.
U kojem je od ovih slu£ajeva ispravno deklarisana konstanta kao £lani a klase?
20.
❍
final static MAX_CENA = 99.98;
❍
final static float MAX_CENA = 99.98;
❍
static double MAX_CENA = 99.98;
❍
final double MAX_CENA = 99.98;
❍
final static double MAX_CENA = 99.98;
Analizirajte slede¢i program:
public class Test { public static void main(String[] args) { int n = 2; xMetod(n); System.out.println("n je " + n); } void xMetod(int n) {
MAX_CENA
60
Klase i objekti n++; } }
xMetod() ne vra¢a nijednu vrednost.
❍
Program ima gre²ku, jer metod
❍
Program ima gre²ku, jer metod
xMetod() nije denisan da bude
stati£ki.
21.
❍
Program prikazuje
n je 1 na ekranu.
❍
Program prikazuje
n je 2 na ekranu.
❍
Program prikazuje
n je 3 na ekranu.
ta se prikazuje drugom naredbom
println u metodu main prilikom
izvr²avanja ovog programa?
public class Test { int i; static int s; public static void main(String[] Test t1 = new Test(); System.out.println("t1.i je " Test t2 = new Test(); System.out.println("t2.i je " Test t3 = new Test(); System.out.println("t3.i je " }
args) { + t1.i + ", t1.s is " + t1.s); + t2.i + ", t2.s je " + t2.s); + t3.i + ", t3.s je " + t3.s);
public Test() { i++; s++; } }
22.
❍
t2.i je 1, t2.s je 1
❍
t2.i je 1, t2.s je 2
❍
t2.i je 2, t2.s je 2
❍
t2.i je 2, t2.s je 1
ta se prikazuje tre¢om naredbom izvr²avanja ovog programa?
println u metodu main prilikom
Klase i objekti
61
public class Test { int i; static int s; public static void main(String[] Test t1 = new Test(); System.out.println("t1.i je " Test t2 = new Test(); System.out.println("t2.i je " Test t3 = new Test(); System.out.println("t3.i je " }
args) { + t1.i + ", t1.s is " + t1.s); + t2.i + ", t2.s je " + t2.s); + t3.i + ", t3.s je " + t3.s);
public Test() { i++; s++; } }
❍ ❍ ❍ ❍ ❍
23.
t3.i je 1, t3.s je 1 t3.i je 1, t3.s je 2 t3.i je 1, t3.s je 3 t3.i je 3, t3.s je 1 t3.i je 3, t3.s je 3
Analizirajte slede¢i program koji se sastoji od dve klase u jednoj datote i:
public class Test { public static void main(String[] args) { A a = new A(); a.n++; } } class A { int n; private A() { } }
❍
Program ima gre²ku, jer klasa struktor.
A ima privatni podrazumevani kon-
62
Klase i objekti ❍
Program ima gre²ku, jer klasa
A ima prazan podrazumevani kon-
struktor.
24.
n nije ini ijalizovana.
❍
Program ima gre²ku, jer promenljiva
❍
Program nema gre²aka i normalno se izvr²ava.
Koja se vrednost polja
b.n prikazuje prvom naredbom println prilikom
izvr²avanja ovog programa?
public class Test { public static void main(String[] args) { int k = 0; Brojaˇ c b = new Brojaˇ c(); for (int i = 0; i < 100; i++) uve´ caj(b, k); System.out.println("b.n = " + b.n); System.out.println("k = " + k); } public static void uve´ caj(Brojaˇ c b, int k) { b.n++; k++; } } class Brojaˇ c { int n; public Brojaˇ c(int n) { this.n = n; } public Brojaˇ c() { this.n = 1; } }
❍
b.n = 101
❍
b.n = 100
❍
b.n = 99
❍
b.n = 98
❍
b.n = 0
Klase i objekti 25.
63
Koja se vrednost promenljive
k prikazuje drugom naredbom println
prilikom izvr²avanja ovog programa?
public class Test { public static void main(String[] args) { int k = 0; Brojaˇ c b = new Brojaˇ c(); for (int i = 0; i < 100; i++) uve´ caj(b, k); System.out.println("b.n = " + b.n); System.out.println("k = " + k); } public static void uve´ caj(Brojaˇ c b, int k) { b.n++; k++; } } class Brojaˇ c { int n; public Brojaˇ c(int n) { this.n = n; } public Brojaˇ c() { this.n = 1; } }
26.
❍
k = 101
❍
k = 100
❍
k = 99
❍
k = 98
❍
k = 0
Analizirajte slede¢u klasu
Krug:
public class Krug { private double preˇ cnik;
64
Klase i objekti
public Krug(double preˇ cnik) { preˇ cnik = preˇ cnik; } }
❍ ❍
Klasa
Krug ima gre²ku, jer nema metod main().
Svaki konstruisani objekat klase naredbom
Krug ¢e imati pre£nik 0. Na primer,
Krug k = new Krug(2.35) dobija se krug k pre£nika 0 iako
se o£ekuje da njegov pre£nik bude 2:35.
❍
Klasa
Krug ima gre²ku, jer se ne moºe pisati naredba dodele preˇ cnik
= preˇ cnik; u konstruktoru.
❍
27.
Klasa
Krug ima gre²ku, jer nema podrazumevani konstruktor.
Analizirajte slede¢i program:
public class Test { private double x; public Test(double x) { this.t(); this.x = x; } public Test() { System.out.println("Podrazumevani konstruktor"); this(23); } public void t() { System.out.println("Poziv metoda t()"); } }
❑
this.t() u konstruktoru Test(double x) moºe se pojednostaviti i zameniti samo sa
❑
this.x u konstruktoru Test(double x) moºe se pojednostaviti i zameniti samo sa
❑
t().
x.
this(23) u konstruktoru Test() mora se pozvati pre naredbe System.out.println("Podrazumevani konstruktor"); .
❑
this(23) u konstruktoru Test() mora se zameniti sa this(23.0).
Klase i objekti
65
Programski zada i 1.
Napisati program koji prikazuje mese£ni kalendar ukoliko su dati mese i godina. Za predstavljanje kalendara iskoristiti klase
GregorianCalendar
2.
Napisati klase
iz paketa
Calendar
i
java.util.
Taˇ cka, Kvadrat i Krug
koje predstavljaju ta£ku, kvadrat
i krug u koordinatnom sistemu ravni. Klasa
Krug treba da sadrºi metod
koji daje opisan kvadrat datog kruga. Napisati jednostavan program koji testira napisane klase.
3.
Napisati klasu
KompleksanBroj
koja predstavlja kompleksan broj sa
realnim i imaginarnim delom. Klasa
KompleksanBroj
treba da sadrºi
metode kojima se realizuju uobi£ajene opera ije nad kompleksnim brojevima. Napisati jednostavan glavni metod
main()
u kojem se testiraju
napisani metodi.
4.
Napisati klasu
RimskiBroj
da se rimski brojevi
ne
koja predstavlja rimski broj. (Pretpostavite
zapisuju u kondenzovanom obliku: na primer,
broj 49 se pi²e XXXXVIIII umesto XLIX.) Klasa
RimskiBroj
treba
da sadrºi metode kojima se realizuju opera ije sabiranja i mnoºenja rimskih brojeva. Napisati jednostavan glavni metod
main()
u kojem
se testiraju napisani metodi.
5.
Ponovo uraditi 5. zadatak iz glave 5, ali tako da program sadrºi posebnu klasu
6.
KockaZaIgru
koja predstavlja ko ku za igranje.
Napisati program koji simulira ba anje nov£i¢a dati broj puta i prikazuje koliko puta su pali pismo i glava. risti posebnu klasu
0; 1; 2; 3; : : : .
Brojaˇ c
Program treba da ko-
koja predstavlja op²ti broja£ za brojanje
Glava
7 Osnovne strukture podataka Pitanja 1.
2.
3.
Koje je ime tre¢eg elementa u nizu pod nazivom
❍
a[2]
❍
a(2)
❍
a[3]
❍
a(3)
Koje su od ovih deklara ija niza
❑
int[] a = new int[2];
❑
int[] a = new int(2);
❑
int a = new int[2];
❑
int a() = new int[2];
Ako je data deklara ija
a?
a pogre²ne?
int i = 5, koji se od ovih izraza mogu koristiti
za indekse elemenata niza
double[] d = new double[100]?
❑
i
❑
(int)(Math.random() * 100)
❑
(int)(Math.random() * 100 + 1) 67
68
Osnovne strukture podataka ❑ ❑ ❑
4.
Math.random() * 100 i + 10 i + 6.5
Analizirajte slede¢i program:
public class Test { public static void main(String[] args) { int[] a = new int[3]; System.out.println("a[0] je " + a[0]); } }
❍ ❍ ❍ ❍
Program ima gre²ku, jer je duºina niza Program ima gre²ku, jer elementi niza Program ima gre²ku, jer element
a premala. a nisu ini ijalizovani.
a[0] nije denisan.
Program nema gre²aka i normalno se izvr²ava prikazuju¢i
a[0] je
0 na ekranu.
5.
Koje su od ovih deklara ija nizova u Javi ispravne?
❑ ❑ ❑ ❑ ❑ ❑
6.
int i = new int(30); double[] d = new double[30]; int[] i = {3, 4, 3, 2}; char[] c = new char(); char[] c = new char{’a’, ’b’, ’c’, ’d’}; char[] c = {’a’, ’b’};
Ako je data deklara ija raza
❍ ❍ ❍ ❍
7.
int[] a = {1, 2, 3, 4}, koja je vrednost iz-
a.length?
0 3 4 5
Analizirajte slede¢i program:
Osnovne strukture podataka
69
public class Test { public static void main(String[] args) { int[] a = new int[5]; int i; for (i = 0; i < a.length; i++) a[i] = i; System.out.print(a[i] + " "); } }
❍
Program prikazuje
0 1 2 3 4 na ekranu.
❍
Program prikazuje
4 na ekranu.
❍
Program ima gre²ku, jer ¢e se koristiti nepostoje¢i element poslednjoj naredbi
❍
Program ima gre²ku, jer promenljiva u metodu
8.
a[5] u
print u metodu main. i u poslednjoj naredbi print
main ne¢e imati nijednu vrednost.
ta je rezultat izvr²avanja ovog programa?
public class Test { public static void main(String[] args) { int[] a = {120, 200, 016}; for (int i = 0; i < a.length; i++) System.out.print(a[i] + " "); } }
9.
❍
Program prikazuje
120 200 16 na ekranu.
❍
Program prikazuje
120 200 14 na ekranu.
❍
Program prikazuje
120 200 22 na ekranu.
❍
Program ima gre²ku, jer umesto
016 treba pisati 16.
ta se prikazuje na ekranu za vrednosti niza ²avanja ovog programa?
public class Test { public static void main(String[] args) { int[] lista1 = {1, 2, 3};
lista2 kao rezultat izvr-
70
Osnovne strukture podataka int[] lista2 = {1, 2, 3}; lista2 = lista1; lista1[0] = 0; lista1[1] = 1; lista2[2] = 2; for (int i = 0; i < lista2.length; i++) System.out.print(lista2[i] + " "); } }
10.
❍
1 2 3
❍
1 1 1
❍
0 1 2
❍
0 1 3
ta se prikazuje na ekranu za vrednosti niza
lista1 kao rezultat izvr-
²avanja ovog programa?
public class Test { public static void main(String[] args) { int[] lista1 = {1, 2, 3}; int[] lista2 = {1, 2, 3}; lista2 = lista1; lista1[0] = 0; lista1[1] = 1; lista2[2] = 2; for (int i = 0; i < lista1.length; i++) System.out.print(lista1[i] + " "); } }
11.
❍
1 2 3
❍
1 1 1
❍
0 1 2
❍
0 1 3
ta se prikazuje na ekranu kao rezultat izvr²avanja ovog programa?
public class Test { public static void main(String[] args) { int[] x = {1, 2, 3, 4}; int[] y = x;
Osnovne strukture podataka
x = new int[2]; for (int i = 0; i < y.length; i++) System.out.print(y[i] + " "); } }
12.
❍
1 2 3 4
❍
0 0
❍
0 0 3 4
❍
0 0 0 0
ta se prikazuje na ekranu kao rezultat izvr²avanja ovog programa?
public class Test { public static void main(String[] args) { int[] x = {1, 2, 3, 4}; int[] y = x; x = new int[2]; for (int i = 0; i < x.length; i++) System.out.print(x[i] + " "); } }
13.
❍
1 2 3 4
❍
0 0
❍
0 0 3 4
❍
0 0 0 0
Analizirajte slede¢i program:
public class Test { public static void main(String[] args) { final int[] x = {1, 2, 3, 4}; int[] y = x; x = new int[2];
71
72
Osnovne strukture podataka
for (int i = 0; i < y.length; i++) System.out.print(y[i] + " "); } }
❍
Program prikazuje
1 2 3 4 na ekranu.
❍
Program prikazuje
0 0 na ekranu.
❍
Program ima gre²ku kod naredbe
x = new int[2], jer je promenljiva
x deklarisana da bude final i ne moºe se menjati.
❍
Elementi niza da bude
14.
x se ne mogu menjati, jer je promenljiva x deklarisana
final.
Analizirajte slede¢i programski fragment:
int[] lista = new int[5]; lista = new int[10];
❍
Programski fragment ima gre²ku, jer se promenljiva
lista ne moºe
menjati nakon ²to joj se dodeli vrednost.
❍
Programski fragment nema gre²aka i normalno se izvr²ava. Drugom naredbom se novi niz dodeljuje promenljivoj
❍
lista.
Programski fragment ima gre²ku, jer se promenljivoj
lista dode-
ljuje novi niz.
❍
Programski fragment ima gre²ku, jer se promenljivoj ljuje novi niz razli£ite duºine od prvog.
15.
Analizirajte slede¢i program:
public class Test { public static void main(String[] args) { int[] a = new int[4]; a[1] = 1; a = new int[2]; System.out.println("a[1] je " + a[1]); } }
lista dode-
Osnovne strukture podataka ❍
73
❍
a = new int[2], jer se novi niz
Program ima gre²ku kod naredbe dodeljuje promenljivoj
a.
Program ima gre²ku kod naredbe
println, jer a[1] nije ini ijalizo-
vano.
16.
17.
❍
Program na ekranu prikazuje
a[1] je 0.
❍
Program na ekranu prikazuje
a[1] je 1.
Naredbom
❍
b = Arrays.copyOf(a, a.length);
❍
b = Arrays.copyOf(a);
❍
Arrays.copyOf(b, a, a.length);
❍
Arrays.copyOf(a, b);
a dodeljuje nizu b.
Kada se dati niz prenosi nekom metodu kao argument, tom metodu se zapravo prenosi
18.
se kopija niza
.
❍
kopija datog niza
❍
kopija prvog elementa datog niza
❍
duºina datog niza
❍
referen a na dati niz
ta se prikazuje na ekranu kao rezultat izvr²avanja ovog programa?
public class Test { public static void main(String[] args) { int[] x = {1, 2, 3, 4, 5}; uve´ caj(x); int[] y = {1, 2, 3, 4, 5}; uve´ caj(y[0]); System.out.println(x[0] + " " + y[0]); } public static void uve´ caj(int[] a) { for (int i = 0; i < a.length; i++) a[i]++; }
74
Osnovne strukture podataka
public static void uve´ caj(int n) { n++; } }
❍ ❍ ❍ ❍ ❍
19.
Poruka o gre²ki.
1 1 2 2 2 1 1 2
ta se prikazuje na ekranu za vrednosti niza
lista kao rezultat izvr²a-
vanja ovog programa?
public class Test { public static void main(String[] args) { int[] lista = {1, 2, 3, 4, 5}; obrniNiz(lista); for (int i = 0; i < lista.length; i++) System.out.print(lista[i] + " "); } public void obrniNiz(int[] a) { int[] b = new int[a.length]; for (int i = 0; i < a.length; i++) b[i] = a[a.length - 1 - i]; a = b; } }
❍ ❍ ❍ ❍
20.
1 2 3 4 5 5 4 3 2 1 5 4 1 2 3 1 2 5 4 3
Analizirajte slede¢i program:
Osnovne strukture podataka
75
public class Test { public static xMetod(new xMetod(new xMetod(new }
void main(String[] args) { double[]{3, 3}); double[5]); double[3]{1, 2, 3});
public void xMetod(double[] a) { System.out.println(a.length); } }
❍
Program ima gre²ku, jer je nepravilan argument
new double[]{3,
3} u prvom pozivu metoda xMetod().
❍
Program ima gre²ku, jer je nepravilan argument drugom pozivu metoda
❍
new double[5] u
xMetod().
Program ima gre²ku, jer je nepravilan argument
new double[3]{1,
2, 3} u tre¢em pozivu metoda xMetod().
❍
Program ima gre²ku, jer ¢e sve vrednosti niza prilikom izvr²avanja drugog poziva metoda
21.
a imati vrednost null
xMetod().
Kako se naziva deo memorije u kojem se sme²taju nizovi, kao i svi objekti? U tom delu se, radi ekasnosti, ne vodi mnogo ra£una o redu po kojem se zauzima slobodna i oslobaa zauzeta memorija.
❍ ❍ ❍ ❍
22.
hip memorija ke² memorija virtuelna memorija
ta se ta£no dobija kada se jedan niz vra¢a kao rezultat nekog metoda?
❍ ❍ ❍ ❍
23.
stek memorija
kopija tog niza kopija prvog elementa tog niza duºina tog niza referen a na taj niz
Ako je dato zaglavlje metoda od ovih naredbi
public static int[] xMetod(), koja se
return moºe koristiti u telu metoda xMetod()?
76
24.
Osnovne strukture podataka ❍
return 1;
❍
return {1, 2, 3};
❍
return int[]{1, 2, 3};
❍
return new int[]{1, 2, 3};
ta se prikazuje na ekranu za vrednosti niza
lista kao rezultat izvr²a-
vanja ovog programa?
public class Test { public static void main(String[] args) { int[] lista = {1, 2, 3, 4, 5}; lista = obrniNiz(lista); for (int i = 0; i < lista.length; i++) System.out.print(lista[i] + " "); } public int[] obrniNiz(int[] a) { int[] b = new int[a.length]; for (int i = 0; i < a.length; i++) b[i] = a[a.length - 1 - i]; return b; } }
25.
❍
1 2 3 4 5
❍
5 4 3 2 1
❍
5 4 1 2 3
❍
1 2 5 4 3
ta se prikazuje na ekranu za vrednosti niza ²avanja ovog programa?
public class Test { public static void main(String[] args) { int[] lista1 = {1, 2, 3, 4, 5};
lista2 kao rezultat izvr-
Osnovne strukture podataka
77
int[] lista2 = obrniNiz(lista1); for (int i = 0; i < lista2.length; i++) System.out.print(lista2[i] + " "); } public int[] obrniNiz(int[] a) { int[] b = new int[a.length]; for (int i = 0; i < a.length; i++) b[i] = a[a.length - 1 - i]; return b; } }
26.
❍
1 2 3 4 5
❍
5 4 3 2 1
❍
5 4 1 2 3
❍
1 2 5 4 3
Ako je data deklara ija
Krug[] k = new Krug[10], koja je od ovih re-
£eni a najta£nija?
❍
Promenljiva
k sadrºi niz od 10 elobrojnih vrednosti.
❍
Promenljiva
k sadrºi niz od 10 objekata klase Krug.
❍
Promenljiva
k sadrºi referen u na niz od 10 promenljivih klasnog
tipa
❍
27.
Krug.
Promenljiva
k sadrºi objekat klase Krug pre£nika 10.
Ako je zaglavlje glavnog metoda klase
Test dato u standardnom obliku
public static void main(String[] args), koji element niza args dobija vrednost stringa
"abc" ukoliko je izvr²avanje klase Test pokrenuto
ovom DOS komandom?
java Test "+" 3 "abc" 2
❍
args[0]
❍
args[1]
❍
args[2]
78
Osnovne strukture podataka ❍
28.
args[3]
Koja su od ovih zaglavlja metoda
prikaži() sa promenljivim brojem
argumenata ispravne?
29.
❑
public void prikaži(String...
niska, double...
❑
public void prikaži(double...
broj, String ime)
❑
public void double...
❑
public void prikaži(double...
❑
public void prikaži(int n, double...
broj)
prikaži(double d1, double d2) broj) broj)
Analizirajte slede¢i program:
public class Test { public static void main(String[] args) { double[] d = {1.0, 2.0, 3.0}; System.out.println(prosek(d)); System.out.println(prosek(1, 2, 2, 1, 4)); System.out.println(prosek(new double[]{1, 2, 3})); System.out.println(prosek(1.0, 2.0, 2.0, 1.0)); } public static double prosek (double... brojevi) { double zbir = 0; for (double e : brojevi) zbir = zbir + e; return zbir / brojevi.length; } }
❍
Program ima gre²ku, jer je nepravilan poziv naredbi
❍
println.
Program ima gre²ku, jer je nepravilan poziv u drugoj naredbi
❍
prosek(d) u prvoj
prosek(1, 2, 2, 1, 4)
println.
Program ima gre²ku, jer je nepravilan poziv
prosek(new double[]{1,
2, 3}) u tre¢oj naredbi println.
❍
Program ima gre²ku, jer je nepravilan poziv
1.0) u £etvrtoj naredbi println.
prosek(1.0, 2.0, 2.0,
Osnovne strukture podataka ❍
79
Program se izvr²ava bez gre²ke i prosek datih brojeva se ta£no izra£unava.
❍
Program se izvr²ava bez gre²ke, ali se prosek datih brojeva ne izra£unava ta£no.
30.
Pozivom
❍ ❍ ❍ ❍
31.
sortira se niz
lotoBrojevi tipa int[].
Arrays(lotoBrojevi) Arrays.sort(lotoBrojevi) Arrays.sorts(lotoBrojevi) Arrays.sortArray(lotoBrojevi)
Ako je data deklara ija
int[] lotoBrojevi = {5, 8, 17, 23, 27, 33,
36}, ²ta je rezultat poziva Arrays.binarySearch(lotoBrojevi, 17)?
❍ ❍ ❍ ❍ ❍
32.
1 1 2 2
Koja je od ovih deklara ija ispravna?
❍ ❍ ❍ ❍
33.
0
char[][] z = {’a’, ’b’}; char[2][2] z = {{’a’, ’b’}, {’c’, ’d’}}; char[2][] z = {{’a’, ’b’}, {’c’, ’d’}}; char[][] z = {{’a’, ’b’}, {’c’, ’d’}};
Ako je data deklara ija nosti duºina
❍ ❍ ❍ ❍
34.
double[][] d = new double[4][5], koje su vred-
d.length i d[2].length?
4 i 4 4 i 5 5 i 4 5 i 5
Analizirajte slede¢i program:
80
Osnovne strukture podataka public class Test { public static void main(String[] args) { boolean[][] x = new boolean[3][]; x[0] = new boolean[1]; x[1] = new boolean[2]; x[2] = new boolean[3]; System.out.println("x[2][2] je " + x[2][2]); } }
❍
Program ima gre²ku, jer je
new boolean[3][] nepravilno.
❍
Program ima gre²ku, jer ¢e
x[2][2] imati vrednost null.
❍
Program se normalno izvr²ava i na ekranu se prikazuje
x[2][2] je
null.
❍
Program se normalno izvr²ava i na ekranu se prikazuje
false.
x[2][2] je
Osnovne strukture podataka
81
Programski zada i 1.
Napisati program kojim se prikazuje niz svih prostih brojeva manjih od
p
dateg broja m koriste¢i postupak Eratostenovog sita: redom isklju£iti proizvode svih prostih brojeva manjih od
m, a oni brojevi koji preo-
stanu su prosti. Grani u niza prostih brojeva m preuzeti iz komandnog reda.
2.
Napisati program koji simulira igru ºivota.
Ova igra se sastoji od
kolonije organizama koji ºive u sopstvenim ¢elijama u kongura iji od dvodimenzionalne matri e ¢elija. Kongura ija organizama se menja u diskretnim vremenskim trenu ima po genera ijama, pri £emu je svaka ¢elija matri e prazna ili zauzeta ºivim organizmom.
Nova genera ija
organizama u ¢elijama nastaje na osnovu stare genera ije organizama zavisno od sadrºaja osam susednih ¢elija svake pojedine ¢elije. (elije na obodu matri e se podrazumevaju da na odgovaraju¢oj strani uvek imaju prazne susedne ¢elije.)
Pravila za formiranje nove genera ije
organizama su: 1. ivi organizam u ¢eliji preºivljava u slede¢eoj genera iji ukoliko je broj njegovih suseda dva ili tri. 2. ivi organizam u ¢eliji umire u slede¢eoj genera iji ukoliko je broj njegovih suseda manji od dva (zbog usamljenosti) ili ve¢i od tri (zbog prenaseljenosti). 3. U praznoj ¢eliji se raa novi organizam ukoliko se u ta£no tri njene susedne ¢elije nalazi ºivi organizam. Drugim re£ima, za ¢elije u svakoj genera iji pravila prelaza su: puna ¢elija ostaje puna ako ima dve ili tri pune susedne ¢elije; puna ¢elija postaje prazna ako ima manje od dve ili vi²e od tri pune susedne ¢elije; prazna ¢elija postaje puna ako ima ta£no tri pune susedne ¢elije, a u suprotnom ostaje prazna. Igra ºivota po£inje od zadate po£etne kongura ije koja se u£itava na ulazu. Zatim se u diskretnim trenu ima redom formiraju slede¢e kongura ije organizama
istovremenom
primenom gornjih pravila na sve
¢elije prethodne kongura ije (tj. nova genera ija se formira isklju£ivo na osnovu prethodne genera ije).
82 3.
Osnovne strukture podataka Napisati klasu kojom se realizuje ke²-memorija. Ke²-memorija (engl.
a he ) je
struktura podataka koja se sastoji od niza elemenata ksne
duºine. U niz se mogu samo dodavati novi elementi i pritom se novi element uvek dodaje na prvo mesto niza. Ali, ukoliko se novi element ve¢ nalazi u nizu, elementi ispred njega se pomeraju za jedno mesto udesno. A ukoliko se novi element ne nalazi u nizu, postoje¢i elementi se takoe pomeraju za jedno mesto udesno, ali se poslednji element odba uje ako je niz ve¢ popunjen.
4.
Iskoristiti prethodni zadatak i napisati program u kojem se otkrivaju £esto ponavljane re£i u tekstu. Jedna re£ u nekom tekstu se £esto ponavlja ukoliko se pojavljuje vi²e od jedanput unutar bilo koje sekven e susednih re£i od, re imo, 30 jedinstvenih re£i. Minimalna funk ionalnost koju program mora imati je: a) Program treba svaku re£ da konvertuje u mala slova kako se ne bi razlikovale iste re£i sa razli£itom veli£inom slova. b) Ukoliko je neka re£ skoro ponovljena u ulaznom tekstu, program treba da prikaºe tu re£ i broj puta koliko je ta re£ bila ponovljena.
5.
Napisati program kojim se upravlja £ekaoni om jednog doma zdravlja. U domu zdravlja radi vi²e doktora £iji se poda i unose na po£etku programa.
Svaki doktor ima svoju spe ijalnost koja je predstavljena
slovnim kodom: o za lekara op²te prakse, k za kardiologa, g za ginekologa i tako dalje. Kada pa ijent doe u dom zdravlja, prijavljuje se na re ep iju i medi inska sestra na osnovu simptoma bolesti odlu£uje o spe ijalnosti doktora koji treba da primi pa ijenta. Kada jedan doktor odgovaraju¢e spe ijalnosti postane slobodan, pa ijent koji najduºe £eka za tu spe ijalnost ide kod takvog doktora na pregled. U domu zdravlja radi vi²e doktora iste spe ijalnosti i oni naizmeni£no primaju pa ijente. Ako doktor zavr²i pregled (i bude slobodan), a nema pa ijenata koji £ekaju za njegovu spe ijalnost, doktor se odmara dok ne bude potreban. Kada je jedan doktor neke spe ijalnosti potreban, pa ijenta prima doktor te spe ijalnosti koji se najduºe odmarao. Prema tome, pa ijenti se primaju kod doktora na fer na£in (oni koji duºe £ekaju ¢e pre biti primljeni) i doktori se odmaraju na fer na£in (oni koji su se duºe odmarali ¢e pre primiti nove pa ijente).
Ali, mogu¢e
Osnovne strukture podataka
83
je da pa ijenti £ekaju iako ima slobodnih doktora, pod uslovom da nijedan od slobodnih doktora nije potrebne spe ijalnosti. Pored op ija za prijavljivanje novog pa ijenta i registrovanje pregledanog pa ijenta, program treba da sadrºi jo² tri dodatne op ije:
za
prikazivanje pa ijenata u £ekaoni i po redu po kome ¢e biti primljeni kod doktora; za prikazivanje slobodnih doktora po redu po kome ¢e primiti pa ijente; i za prikazivanje aktuelnih pregleda, odnosno parova zauzetih doktora i njihovih trenutnih pa ijenata.
Glava
8 Nasleivanje klasa Pitanja 1.
Objektno orijentisano programiranje i Java omogu¢avaju da se nove klase prave na osnovu postoje¢ih klasa. Kako se naziva takva mogu¢nost?
❍ ❍ ❍ ❍
2.
enkapsula ija nasleivanje polimorzam apstrak ija
Koje su od ovih re£eni a ta£ne?
❑ ❑
Jedna klasa u Javi moºe
direktno
pro²irivati vi²e klasa.
Pro²irena klasa sadrºi dodatna polja i metode u odnosu na svoju nasleenu klasu.
❑ ❑
Klasa
A nasleuje klasu B zna£i da je A potklasa od B.
Ako klasa
A nasleuje klasu B, tada objekti klase A sadrºe sva polja
i sve metode klase
❑
Ako klasa
B.
A nasleuje klasu B, tada se svaki objekat klase A podra-
zumeva da je i objekat klase
3.
B.
Pronaite sve gre²ke u slede¢em programu:
85
86
Nasleivanje klasa
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
4.
public class Test { public static void main(String[] args) { Vozilo v = new Vozilo(8); v.vozi(); v.brojVrata = 2; Vozilo bmw = new Auto(2, 4); bmw.vozi(); Auto audi = new Auto(4); Auto.vozi(); } } class Vozilo { public int brojToˇ ckova; public Vozilo(int t) { brojToˇ ckova = t; } public void vozi() { System.out.println("Vožnja vozila"); } } class Auto extends Vozilo { public int brojVrata; public Auto(int v, int t) { super(t); brojVrata = v; } public void vozi() { System.out.println("Vožnja auta"); } }
❍
Gre²ke su u redovima 7, 10 i 14.
❍
Gre²ke su u redovima 7, 9 i 25.
❍
Gre²ke su u redovima 6, 7 i 10.
❍
Gre²ke su u redovima 6, 9 i 10.
❍
Gre²ke su u redovima 6, 9 i 29.
❍
Gre²ke su u redovima 9, 10 i 29.
Analizirajte slede¢i program:
Nasleivanje klasa
87
public class Test extends A { public static void main(String[] args) { Test t = new Test(); t.prikaži(); } } class A { String s; public A(String s) { this.s = s; } public void prikaži() { System.out.println(s); } }
❑
Program ima gre²ku, jer klasa tor
❑
Test().
Program ima gre²ku, jer klasa konstruktor bez parametara konstruktor.
Test ima impli itni podrazumevani
Test(), ali nasleena klasa A nema takav
Program bi radio bez gre²ke ukoliko bi se uklonio
konstruktor u klasi
❑
Test nema podrazumevani konstruk-
A.
Program ima gre²ku, ali bi radio bez gre²ke ukoliko bi se klasi ekspli itno dodao konstruktor bez parametara
5.
A().
ta se prikazuje na ekranu kao rezultat izvr²avanja ovog programa?
public class Test extends A { public static void main(String[] args) { Test t = new Test(); } } class A extends B { public A() { System.out.println( "Pozvan podrazumevani konstruktor klase A"); } }
A
88
Nasleivanje klasa class B { public B() { System.out.println( "Pozvan podrazumevani konstruktor klase B"); } }
❍
Ni²ta.
❍
Pozvan podrazumevani konstruktor klase A
❍
Pozvan podrazumevani konstruktor klase B
❍
Pozvan podrazumevani konstruktor klase A i u drugom redu Pozvan podrazumevani konstruktor klase B
❍
Pozvan podrazumevani konstruktor klase B i u drugom redu Pozvan podrazumevani konstruktor klase A
6.
Koja od ovih re£eni a o sluºbenoj re£i
❍
Sluºbena re£
super
nije
ta£na?
super moºe posluºiti za pozivanje konstruktora nasle-
ene klase.
❍
Sluºbena re£
super moºe posluºiti za pozivanje zaklonjenog metoda
nasleene klase.
❍
Sluºbena re£
super ne moºe posluºiti za pozivanje zaklonjenog polja
nasleene klase.
7.
Analizirajte slede¢i program:
public class Test { public static void main(String[] args) { B b = new B(); b.m(5); System.out.println("b.i je " + b.i); } } class A { int i; public void m(int i) { this.i = i; } }
Nasleivanje klasa
89
class B extends A { public void m(String s) { System.out.println(s); } }
❍
Program ima gre²ku, jer je metod som u klasi
❍
m() nadja£an sa razli£itim potpi-
B.
Program ima gre²ku, jer se
b.m(5) ne moºe pozvati po²to je metod
m(int) zaklonjen u klasi B.
❍
Program ima gre²ku kod
b.i, jer je polje i nepristupa£no iz klase
B.
❍
Metod
m() nije nadja£an u klasi B. Klasa B nasleuje metod m(int)
od klase
8.
A i u B se deni²e preoptere¢en metod m(String).
Koje su od ovih re£eni a ta£ne?
❑
Metod se moºe preopteretiti u istoj klasi.
❑
Metod se moºe nadja£ati u istoj klasi.
❑
Ako su metodi preoptere¢eni, njihovi potpisi moraju biti isti.
❑
Ako jedan metod nadja£ava drugi metod, njihovi potpisi moraju biti isti.
9.
Koje su od ovih re£eni a ta£ne?
❑
Jedna forma polimorzma u Javi je prin ip podtipa po kojem promenljiva klasnog tipa moºe sadrºati referen e na objekte svog deklarisanog tipa i svakog njegovog podtipa.
❑
Objekat tipa
B se moºe preneti kao argument metodu na mesto
paramatera tipa
❑
A ukoliko je B klasa nasledni a od A.
Za razre²avanje poziva preoptere¢enih metoda se primenjuje stati£ko vezivanje u fazi prevoenja programa.
❑
Za razre²avanje poziva nadja£anih metoda se primenjuje dinami£ko vezivanje u fazi izvr²avanja programa.
10.
Analizirajte slede¢i program:
90
Nasleivanje klasa public class Test { public static void main(String[] args) { Tim partizan = new Tim("Partizan", "Beograd"); Tim zvezda = new Tim("Crvena zvezda", "Beograd"); KošarkaškaUtakmica finale; finale = new KošarkaškaUtakmica(partizan, zvezda); finale.doma´ cinPoentirao(3); finale.gostPoentirao(2); finale.pobednikUtakmice(); } } class Tim { private String ime; private String mesto; public Tim(String ime, String mesto) { this.ime = ime; this.mesto = mesto; } public String toString() { return ime + " (" + mesto + ")"; } } class KošarkaškaUtakmica { public Tim doma´ cin, gost; public int brojPoenaDoma´ cina, brojPoenaGosta; public KošarkaškaUtakmica(Tim d, Tim g) { doma´ cin = d; gost = g; } public void doma´ cinPoentirao(int brojPoena) { brojPoenaDoma´ cina += brojPoena; } public void gostPoentirao(int brojPoena) { brojPoenaGosta += brojPoena; } public void pobednikUtakmice() { if (brojPoenaDoma´ cina > brojPoenaGosta)
Nasleivanje klasa
91
System.out.println("Pobednik je " + doma´ cin); else if (brojPoenaDoma´ cina < brojPoenaGosta) System.out.println("Pobednik je " + gost); else System.out.println("Nerešeno"); } }
❍ ❍
Izvr²avanjem programa se na ekranu ni²ta ne prikazuje. Izvr²avanjem programa se na ekranu prikazuje tekst:
Pobednik je
Crvena zvezda.
❍
Izvr²avanjem programa se na ekranu prikazuje tekst:
Pobednik je
Crvena zvezda (Beograd).
❍
Izvr²avanjem programa se na ekranu prikazuje tekst:
Pobednik je
Partizan.
❍
Izvr²avanjem programa se na ekranu prikazuje tekst:
Pobednik je
Partizan (Beograd).
❍
11.
Izvr²avanjem program se na ekranu prikazuje tekst:
Nerešeno.
Analizirajte slede¢i program:
public class Test { public static void main(String[] args) { Object a = new A(); Object o = new Object(); System.out.println(a); System.out.println(o); } } class A { int x; public String toString() { return "x u A je " + x; } }
❑
Program ima sintaksnu gre²ku, jer naredbu treba zameniti naredbom
❑
System.out.println(a)
System.out.println(a.toString()).
Program nema gre²ke i poziva se metod prilikom izvr²avanja naredbe
toString() u klasi Object
System.out.println(a).
92
Nasleivanje klasa ❑
Program nema gre²ke i poziva se metod izvr²avanja naredbe
❑
Program nema gre²ke i poziva se metod prilikom izvr²avanja naredbe
12.
toString() u klasi A prilikom
System.out.println(a).
Metod
toString() u klasi Object
System.out.println(o).
equals() za proveru jednakosti dva objekta je denisan u klasi
Object. Ukoliko bi se taj metod nadja£ao u klasi String, koje bi od ovih zaglavlja tog nadja£anog metoda bilo ispravno?
13.
❍
public boolean equals(String s)
❍
public boolean equals(Object o)
❍
public static boolean equals(Object o)
❍
public boolean equals(String s1, String s2)
Analizirajte slede¢i program:
public class Test { public static void main(String[] args) { Object a1 = new A(); Object a2 = new A(); System.out.println(a1.equals(a2)); } } class A { int x; public boolean equals(Object o) { A a = (A)o; return this.x == a.x; } }
❍
Program ima gre²ku, jer se izrazom kost objekata tipa razli£itog od
14.
a1.equals(a2) proverava jedna-
Object.
❍
Program se izvr²ava bez gre²ke i prikazuje se
true na ekranu.
❍
Program se izvr²ava bez gre²ke i prikazuje se
false na ekranu.
Analizirajte slede¢i program:
Nasleivanje klasa
93
public class Test { public static void main(String[] args) { Object a1 = new A(); Object a2 = new A(); System.out.println(a1.equals(a2)); } } class A { int x; public boolean equals(A a) { return this.x == a.x; } }
❍
Program ima gre²ku, jer se izrazom kost objekata tipa razli£itog od
15.
a1.equals(a2) proverava jedna-
Object.
❍
Program se izvr²ava bez gre²ke i prikazuje se
true na ekranu.
❍
Program se izvr²ava bez gre²ke i prikazuje se
false na ekranu.
Analizirajte slede¢i program:
public class Test { public static void main(String[] args) { A a1 = new A(); A a2 = new A(); System.out.println(a1.equals(a2)); } } class A { int x; public boolean equals(A a) { return this.x == a.x; } }
❍
Program ima gre²ku, jer se izrazom kost objekata tipa razli£itog od
a1.equals(a2) proverava jedna-
Object.
❍
Program se izvr²ava bez gre²ke i prikazuje se
true na ekranu.
❍
Program se izvr²ava bez gre²ke i prikazuje se
false na ekranu.
94 16.
Nasleivanje klasa Pronaite gre²ke u slede¢em programu:
public class Test { public static void main(String[] args) { m(new MasterStudent()); m(new Student()); m(new Osoba()); m(new Object()); } public static void m(Student x) { System.out.println(x.toString()); } } class MasterStudent extends Student { } class Student extends Osoba { public String toString() { return "Student"; } } class Osoba extends Object { public String toString() { return "Osoba"; } }
❑ ❑ ❑ ❑
17.
Gre²ka je u pozivu
m(new MasterStudent()).
Gre²ka je u pozivu
m(new Student()).
Gre²ka je u pozivu
m(new Osoba()).
Gre²ka je u pozivu
m(new Object()).
Analizirajte slede¢i programski fragment:
class class class class
C1 C2 C3 C4
C1 C2 C3 C4
= = = =
c1 c2 c3 c4
{ } extends C1 { } extends C2 { } extends C1 { }
new new new new
C1(); C2(); C3(); C4();
Nasleivanje klasa
18.
95
❑
Rezultat izraza
c1 instanceof C1 je true.
❑
Rezultat izraza
c2 instanceof C1 je true.
❑
Rezultat izraza
c3 instanceof C1 je true.
❑
Rezultat izraza
c4 instanceof C2 je true.
Analizirajte slede¢i program:
public class Test { public static void main(String[] args) { String s = "Java"; Object o = s; String t = (String)o; } }
❍
Kada se promenljiva
s dodeljuje promenljivoj o u naredbi Object o
= s, konstrui²e se novi objekat.
❍
Kada se konvertuje tip promenljiva promenljivoj
o i njena vrednost dodeljuje
t u naredbi String t = (String)o, konstrui²e se novi
objekat.
❍
Kada se konvertuje tip promenljiva menljivoj
o i njena vrednost dodeljuje pro-
t u naredbi String t = (String)o, sadrºaj promenljive o
se menja.
❍
19.
20.
Promenljive
s, o i t ukazuju na isti objekat tipa String.
Ako je data deklara ija niza
Object[] x, koje su od ovih naredbi ispravne?
❑
x = new char[100];
❑
x = new int[100];
❑
x = new double[100];
❑
x = new String[100];
❑
x = new java.util.Date[100];
Kojim se od ovih izraza ispravno konstrui²e dinami£ki niz tipa
❍
new ArrayList[]
❍
new ArrayList[100]
❍
new ArrayList()
ArrayList?
96
Nasleivanje klasa ❍
21.
ArrayList()
Ako je
x dinami£ki niz tipa ArrayList £iji su elementi dva
stringa
[Java, C++], tim redom, kojom naredbom ¢e se njegov sadrºaj
smanjiti na
22.
[Java]?
❑
x.remove("C++")
❑
x.remove(0)
❑
x.remove(1)
❑
x.remove(2)
Ako je
x dinami£ki niz tipa ArrayList £iji su elementi dva
stringa
[Java, C++], tim redom, ²ta ¢e biti njegov novi sadrºaj nakon
izvr²avanja naredbe
23.
24.
25.
x.add("Pascal")?
❍
[Java, Pascal]
❍
[Java, C++, Pascal]
❍
[Pascal, Java, C++]
❍
[Java, Pascal, C++]
Kojom se naredbom dobija prvi element niza
❍
x.first()
❍
x.get(0)
❍
x.get(1)
❍
x.get()
x tipa ArrayList?
Kojom se naredbom dobija aktuelna duºina niza
❍
x.getSize()
❍
x.getLength(0)
❍
x.length(1)
❍
x.size()
Koja se od ovih klasa ne moºe nasleivati?
❍
class A { }
x tipa ArrayList?
Nasleivanje klasa ❍
class A { private A(){ } }
❍
final class A { }
❍
class A { protected A(){ } }
97
98
Nasleivanje klasa
Programski zada i 1.
PovezanaLista
Napisati klasu
koja predstavlja jednostruko povezanu
listu objekata. Jedan element liste treba da bude predstavljen posebnom klasom
ElementListe,
a klasa
PovezanaLista
treba da omogu-
¢ava samo osnovne opera ije za rad sa listom: dodavanja novog objekta na kraj liste i proveravanje da li se dati objekat nalazi u listi ili ne. (Pretpostavite da objekti u elementima liste implementiraju metod
equals()
2.
kojim se ispituje njihova jednakost.)
Koriste¢i klasu
PovezanaLista
napisati klasu
PoliLinija
kojom se
poligonalna linija predstavlja u obliku liste njenih ta£aka temena.
3.
Pro²iriti klasu
PovezanaLista
iz 1. zadatka tako da se omogu¢ava pri-
stup jednom elementu povezane liste kojim se odreuje teku¢a pozi ija u listi. Pro²irenoj klasi dodati i metode kojima se dodaje novi objekat u teku¢oj pozi iji i uklanja element na teku¢oj pozi i.
Glava
9 Posebne klase i interfejsi Pitanja 1.
Koje su od ovih re£eni a o nabrojivim tipovima ta£ne?
❑
Deni ija nabrojivog tipa moºe stajati unutar nekog metoda.
❑
Nabrojivi tip mora biti £lan neke klase.
❑
Vrednosti nabrojivog tipa su kodirani obi£nim elim brojevima 0, 1,
2 i tako dalje.
❑
Za vrednosti nabrojivog tipa koristi se konven ija o imenima za obi£ne konstante.
❑
2.
Nabrojivi tip je spe ijalna vrsta ugnjeºene klase.
Ako u programu treba koristiti tri osnovne boje, koja od ovih deklara ija predstavlja verovatno najbolji pristup za takav problem?
3.
❍
public enum osnovnaBoja {crvena, žuta, plava}
❍
public int[] osnovnaBoja = {1, 2, 3}
❍
public enum OsnovnaBoja {CRVENA, ŽUTA, PLAVA}
❍
public String[] osnovnaBoja = {"crvena", "žuta", "plava"}
❍
public String boja1 = "crvena", boja2 = "žuta", boja3 = "plava"
ta se prikazuje na ekranu kao rezultat izvr²avanja ovog programa?
99
100
Posebne klase i interfejsi public class Test { public enum Dan { PONEDELJAK, UTORAK, SREDA, ˇ CETVRTAK, PETAK, SUBOTA, NEDELJA}; public static void main(String[] args) { Dan d = Dan.SREDA; System.out.print(d + " je "); System.out.println(d.ordinal() + ". dan u nedelji"); } }
4.
❍
SREDA je 3. dan u nedelji
❍
Sreda je 3. dan u nedelji
❍
Dan.SREDA je 3. dan u nedelji
❍
SREDA je 2. dan u nedelji
❍
Sreda je 2. dan u nedelji
❍
Dan.SREDA je 2. dan u nedelji
ta se prikazuje na ekranu kao rezultat izvr²avanja ovog programa?
public class Test { public enum SvetloSemafora { CRVENO ("Stani"), ZELENO ("Kreni"), ŽUTO ("Pazi"); private String opis; private SvetloSemafora(String opis) { this.opis = opis; } public String getOpis() { return opis; } } public static void main(String[] args) { SvetloSemafora svetlo = SvetloSemafora.ZELENO; System.out.println(svetlo.getOpis()); } }
❍
SvetloSemafora.ZELENO
❍
ZELENO
❍
zeleno
Posebne klase i interfejsi ❍ ❍
5.
6.
Kreni Pazi
Koja je od ovih deni ija apstraktne klase
❍ ❍ ❍ ❍
101
A ispravna?
class A { abstract void aMetod() { } } class A { abstract void aMetod(); } abstract class A { abstract void aMetod(); } public class abstract A { abstract void aMetod(); }
U kojem je od ovih slu£ajeva ispravno denisan apstraktni metod
aMetod() u nekoj apstraktnoj klasi?
❍ ❍ ❍ ❍ ❍
7.
public abstract void aMetod(); public void abstract aMetod(); public void aMetod() { } public abstract void aMetod() { }
Koje su od ovih re£eni a o apstraktnim klasama ta£ne?
❑ ❑ ❑ ❑
8.
public abstract aMetod();
Mogu¢e je konstruisati objekte apstraktne klase. Apstraktna klasa moºe biti tip neke objektne promenljive. Klasa koja nasleuje apstraktnu klasu moºe biti apstraktna. Klasa koja nasleuje konkretnu klasu moºe biti apstraktna.
Koje su od ovih re£eni a o apstraktnim klasama ta£ne?
❑ ❑ ❑
Apstraktne klase ne mogu imati konstruktore. Klasa koja sadrºi apstraktni metod mora biti apstraktna. Mogu¢e je denisati apstraktnu klasu koja ne sadrºi nijedan apstraktni metod.
❑
9.
Apstraktne klase mogu imati konkretna polja i metode.
Ako je A apstraktna klasa, B je njena konkretna klasa nasledni a i obe klase imaju podrazumevane konstruktore bez parametara, koje su od ovih deklara ija ispravne?
102
10.
11.
Posebne klase i interfejsi
❑
A a = new A();
❑
A a = new B();
❑
B b = new A();
❑
B b = new B();
Koja je od ovih deni ija interfejsa
A ispravna?
❍
interface A { void print() { }; }
❍
abstract interface A { print(); }
❍
abstract interface A { abstract void print() { }; }
❍
interface A { void print(); }
ta se prikazuje na ekranu kao rezultat izvr²avanja ovog programa?
public class Test { public static void main(String[] args) { B b = new B(); if (b instanceof A) System.out.println("b je instanca A"); if (b instanceof C) System.out.println("b je instanca C"); } } interface A { } class B extends D implements A { } class C { } class D extends C { }
❍
Ni²ta.
❍
b je instanca A
❍
b je instanca C
❍
b je instanca A i u drugom redu b je instanca C
Posebne klase i interfejsi 12.
103
Ako je A interfejs i B je konkretna klasa sa podrazumevanim konstruktorom koja implementira A, koje su od ovih deklara ija ispravne?
13.
❑
A a = new A();
❑
A a = new B();
❑
B b = new A();
❑
B b = new B();
Analizirajte slede¢i program:
public class Test { public static void main(String[] args) { Vo´ cka[] vo´ ce = {new Vo´ cka(2), new Vo´ cka(3), new Vo´ cka(1)}; java.util.Arrays.sort(vo´ ce); } } class Vo´ cka { private double težina; public Vo´ cka(double težina) { this.težina = težina; } }
❍
Program ima gre²ku, jer klasa
Vo´ cka nema podrazumevani konstruk-
tor.
❍ ❍
Program ima gre²ku kod dodeljivanja po£etnih vrednosti nizu Program ima gre²ku kod sortiranja niza implementira interfejs
vo´ ce, jer klasa Vo´ cka ne
Comparable i zato objekti klase Vo´ cka nisu
uporedivi.
❍
14.
Program nema gre²ke, ali se ni²ta ne prikazuje na ekranu.
Analizirajte slede¢u klasu
vo´ ce.
Radnik:
public class Radnik implements Comparable { double plata; public int compareTo(Object o) { Radnik r = (Radnik) o;
104
Posebne klase i interfejsi
if (this.plata < r.plata) return -1; if (this.plata > r.plata) return +1; return 0; } public static Radnik max(Radnik r1, Radnik r2) { if (r1.compareTo(r2) >= 0) return r1; else return r2; } }
❍ ❍
Klasa
Radnik ima gre²ku, jer nema nijedan konstruktor.
Klasa
Radnik ima gre²ku, jer je metod max() denisan da bude
static.
❍
Klasa
Radnik ima gre²ku, jer tip vra¢ene vrednosti metoda max()
treba da bude
❍
15.
Klasa
int.
Radnik nema gre²aka.
Koje su od ovih re£eni a o ugnjeºenim klasama ta£ne?
❑
Ugnjeºene klase se mogu denisati kao £lanovi druge klase ili lokalno unutar metoda druge klase.
❑
Stati£ke i objektne ugnjeºene klase se, kao i obi£ne klase, mogu denisati samo sa modikatorom
❑
public ili bez njega.
Stati£ka ugnjeºena klasa ima potpun pristup stati£kim £lanovima obuhvataju¢e klase, £ak i ukoliko su oni deklarisani kao privatni.
❑
Objektna ugnjeºena klasa je analogna objektnom polju ili objektnom metodu.
Zbog toga je objektna ugnjeºena klasa vezana za
objekat obuhvataju¢e klase.
16.
Ako je
A stati£ka ili objektna klasa ugnjeºena unutar klase Test, koje
ime ¢e imati datoteka u kojoj se nalazi bajtkod klase
❍
A.class
❍ ❍ ❍
Test$A.class A$Test.class Test&A.class
A?
Posebne klase i interfejsi 17.
105
Koja je od ovih re£eni a o objektnim ugnjeºenim klasama ta£na?
❍
Objektne ugnjeºene klase moraju implementirati neki interfejs.
❍
Objektne ugnjeºene klase se mogu instan irati samo unutar obuhvataju¢e klase.
❍
Objektne ugnjeºene klase imaju pristup svim objektnim £lanovima obuhvataju¢e klase, £ak i ukoliko su oni deklarisani kao privatni.
❍
Objektne ugnjeºene klase se deni²u kao £lanovi obuhvataju¢e klase sa modikatorom
18.
object.
Koje su od ovih re£eni a o anonimnim klasama ta£ne?
❑
Anonimne klase su lokalne klase bez imena.
❑
Anonimne klase uvek nasleuju neku klasu ili implementiraju neki interfejs, ali ne sadrºe ekspli itne re£i
❑
extends ili implements.
Anonimne klase moraju implementirati sve apstraktne metode u nasleenoj klasi ili interfejsu.
❑
Anonimne klase uvek koriste podrazumevani konstruktor bez argumenata nasleene klase radi konstruisanja svojih instan i.
19.
Ako je jedna anonimna klasa ugnjeºena unutar klase
Test, koje ime
¢e imati datoteka u kojoj se nalazi bajtkod te anonimne klase?
❍
A.class
❍
Test$A.class
❍
A$Test.class
❍
TestA.class
❍
Test$1.class
106
Posebne klase i interfejsi
Programski zada i 1.
Napisati klasu
Karta
koja predstavlja kartu za igranje, a za predsta-
vljanje boje i vrednosti karte koristiti nabrojive tipove. Radi testiranja napisati metod
2.
main()
u kome se prikazuje eo ²pil karata.
Konverzije
Napisati interfejs
i konkretnu klasu
Konvertor
koja ga
implementira radi meusobnog pretvaranja veli£ina izraºenih u anglosaksonskim i interna ionalnim jedini ama (in£i i entimetri, funte i kilogrami, . . . ).
3.
Napisati interfejs
PrenosnikUtakmice
koji sadrºi metode koji su bitni
za prenos toka ko²arka²ke utakmi e sa gledi²ta onoga ko prenosi utakmi u. Napisati klasu
Utakmica
koja predstavlja ko²arka²ku utakmi u
sa listom prenosnika koji je prenose. Napisati i klase i
MobilniTelefon
koje implementiraju interfejs
Zapisnik, Semafor
PrenosnikUtakmice
radi prenosa toka ko²arka²ke utakmi e. Na kraju, radi testiranja napisati klasu koja simulira jednu ko²arka²ku utakmi u.
4.
Napisati apstraktnu klasu
GeometrijskiOblik
koja predstavlja geome-
trijski oblik u ravni (krug, pravougaonik, . . . ). Objekti ove klase treba da poseduju referentnu ta£ku pomo¢u koje se mogu translirati u ravni. Pored apstraktnog metoda za transliranje geometrijskog oblika, klasa treba da ima i apstraktne metode za obim i povr²inu geometrijskog oblika. Konkretizovati apstraktnu klasu za geometrijske oblike kruga i pravougaonika i napisati posebnu klasu radi testiranja.
5.
Ponoviti 4. zadatak uz dodatnu funk ionalnost da se geometrijski obli i mogu uporeivati na osnovu njihove povr²ine. Radi testiranja, u posebnoj klasi na slu£ajan na£in generisati niz od 20 geometrijskih oblika i prikazati ih u rastu¢em redosledu.
6.
Napisati apstraktnu klasu zabavu, zatim interfejs
Ure¯ daj
koja predstavlja ureaj za ku¢nu
DaljinskiUpravljaˇ c
koji predstavlja daljinski
upravlja£ za njihovo upravljanje, kao i dve klase
TV
i
DVDPlejer
koje
Posebne klase i interfejsi
107
pro²iruju apstraktnu klasu
Upravljaˇ c.
Ure¯ daj i interpretiraju
Napisati i posebnu klasu
interfejs
Ku´ cna Zabava
Daljinski-
radi testiranja
metoda svih klasa i polimorzma objekata.
7.
Ponovo napisati klasu
PovezanaLista
drugi na£in tako da klasa
8.
iz 1. zadatka u glavi 8, ali na
ElementListe
bude ugnjeºena.
Ponovo napisati program koji simulira igru ºivota iz 2. zadatka u glavi 7, ali na drugi na£in tako da se koristi ugnjeºena klasa za ¢elije kolonije organizama i nabrojivi tip koji opisuje sadrºaj ¢elija (zauzeto/prazno).
9.
Napisati klasu
Sortiraˇ c
u kojoj je denisan stati£ki metod za sortira-
nje niza objekata u rastu¢em redosledu.
Relativan redosled objekata
odreuje se jednim parametrom tog metoda tipa
Upore¯ divaˇ c
Upore¯ divaˇ c.
Pritom,
je ugnjeºeni interfejs u kojem je denisan metod za pore-
enje dva objekta. Radi testiranja, u posebnoj klasi na slu£ajan na£in generisati niz od 10 kompleksnih brojeva (iskoristiti re²enje 3. zadatka iz glave 6) i sortirati ga na dva na£ina: prema modulima kompleksnih brojeva, kao i prema njihovim realnim a zatim imaginarnim delovima (ako su realni delovi jednaki).
Glava
10 Gra£ko programiranje Pitanja 1.
2.
3.
Gra£ki programi u Javi su
.
❑
voeni dogaajima
❑
sporiji od konzolnih programa
❑
zasnovani na gra£kom korisni£kom interfejsu
❑
objektno orijentisani
Koje se od ovih klasa nalaze u paketu
❑
Color
❑
Font
❑
Component
❑
JFrame
❑
JComponent
Koje se od ovih klasa nalaze u paketu
❑
Color
❑
Font
❑
Component 109
java.awt?
java.swing?
110
4.
Gra£ko programiranje
❑
JFrame
❑
JComponent
Analizirajte slede¢i program:
import java.awt.*; import javax.swing.*; public class Test { public static void main(String[] args) { JButton dugmeOK = new JButton("OK"); JFrame okvir = new JFrame("Moj okvir"); okvir.add(dugmeOK); okvir.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); okvir.setVisible(true); } }
❍ ❍
Program ima gre²ku, jer
Program ima gre²ku, jer se tipa
❍
dugmeOK treba da bude tipa Button. dugmeOK ne moºe direktno dodati okviru
JFrame.
Program ima gre²ku, jer se naredbom
new JFrame("Moj okvir") ne
moºe konstruisati okvir.
❍
5.
Program nema gre²aka i normalno se izvr²ava.
Analizirajte slede¢i program:
import java.awt.*; import javax.swing.*; public class Test { public static void main(String[] args) { JFrame okvir = new JFrame("Moj okvir"); okvir.add(new JButton("OK")); okvir.add(new JButton("Cancel")); okvir.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); okvir.setSize(200, 200); okvir.setVisible(true); } }
❍
Prikazuje se samo dugme
OK.
Gra£ko programiranje
111
❍
Prikazuje se samo dugme
❍
Prikazuju se oba dugmeta levo od dugmeta
❍
OK i Cancel, pri £emu se dugme OK nalazi
Cancel.
Prikazuju se oba dugmeta desno od dugmeta
6.
Cancel.
OK i Cancel, pri £emu se dugme OK nalazi
Cancel.
Koliko se okvira prikazuje ovim programom?
import javax.swing.*; public class Test { public static void main(String[] args) { JFrame okvir1 = new JFrame(); JFrame okvir2 = okvir1; JFrame okvir3 = okvir2; okvir1.setVisible(true); okvir2.setVisible(true); okvir3.setVisible(true); } }
7.
❍
1
❍
2
❍
3
❍
0
Koliko se okvira prikazuje ovim programom?
import javax.swing.*; public class Test extends JFrame { public static void main(String[] args) { JFrame okvir1 = new Test(); JFrame okvir2 = new Test(); JFrame okvir3 = new Test(); okvir1.setVisible(true); okvir2.setVisible(true); okvir3.setVisible(true); } }
❍
1
112
8.
9.
10.
Gra£ko programiranje
❍
2
❍
3
❍
0
Kako se naziva najmanja ta£ka za rtanje na ekranu?
❍
rezolu ija
❍
grid
❍
piksel
❍
dot
Koja je od ovih re£eni a o koordinatnom po£etku ekrana ta£na?
❍
Koordinatni po£etak (0; 0) se nalazi u donjem levom uglu ekrana.
❍
Koordinatni po£etak (0; 0) se nalazi u gornjem levom uglu ekrana.
❍
Koordinatni po£etak (0; 0) se nalazi u entru ekrana.
❍
Koordinatni po£etak (0; 0) se moºe programski promeniti.
Koje koordinate u Javi ima ta£ke A na ovoj sli i?
Ekran 150 200
11.
❍
(200; 150)
❍
(200; 100)
❍
(100; 100)
❍
(100; 150)
b
A
100 100
Kako ¢e izgledati okvir posle izvr²avanja ove naredbe?
okvir.setBounds(100, 150, 300, 200);
Gra£ko programiranje
12.
113
❑
Gornji levi ugao okvira se nalazi u ta£ki sa koordinatama (100; 150).
❑
Gornji levi ugao okvira se nalazi u ta£ki sa koordinatama (300; 200).
❑
irina okvira je 300 piksela i visina okvira je 200 piksela.
❑
irina okvira je 100 piksela i visina okvira je 150 piksela.
Koje su
relativne
koordinate gornjeg levog ugla svake gra£ke kompo-
nente?
13.
14.
❍
(0; 0)
❍
(10; 10)
❍
(100; 100)
❍
neodreene
Koji je podrazumevani na£in razme²tanja komponenti u panelu?
❍
FlowLayout.
❍
GridLayout.
❍ ❍
BorderLayout. Nijedan.
Koji postupak razme²tanja komponenti unutar panela treba primeniti ukoliko dugme koje se nalazi u panelu ne treba da menja veli£inu usled promene veli£ine panela?
❍
FlowLayout.
❍
GridLayout.
❍
BorderLayout, ali dugme treba dodati entralnom polju panela.
❍
BorderLayout, ali dugme treba dodati isto£nom ili zapadnom polju panela.
❍
BorderLayout, ali dugme treba dodati severnom ili juºnom polju panela.
15.
Kojim se od ovih naredbi postiºe da razme²tanje komponenti unutar panela
❑ ❑
p tipa JPanel bude izvedeno postupkom BorderLayout?
p.setLayout(new BorderLayout()); p.setLayout(BorderLayout());
114 ❑ ❑ ❑
16.
Gra£ko programiranje p.setLayout(new BorderLayout(5, 10)); p.setLayout(new BorderLayout(BorderLayout.CENTER)); p.setLayout(BorderLayout(BorderLayout.CENTER));
Kojom se od ovih naredbi ispravno dodaje komponenta
k panelu p tipa
JPanel?
❍ ❍ ❍ ❍ ❍
17.
p.add(k); p.insert(k); p.append(k); k.addContentPane(p);
Koji metod treba nadja£ati radi rtanja u svakoj Swing komponenti?
❍ ❍ ❍ ❍
18.
k.add(p);
repaint() update() paintComponent() init()
Koje su od ovih re£eni a u vezi sa rtanjem u Javi ta£ne?
❑ ❑
Objekat tipa
Graphics se moºe konstruisati pomo¢u new Graphics().
Svaki put kada se komponenta prikaºe na ekranu, automatski se konstrui²e njen objekat tipa
❑
Metod
Graphics.
paintComponent() ne treba nikad pozivati direktno, jer se on
automatski poziva od strane JVM.
❑
Pozivanje metoda
paintComponent() od strane JVM se moºe impli-
itno zahtevati metodom
19.
repaint().
Za proizvoljno rtanje u Javi, najbolje je denisati posebnu klasu koja pro²iruje klasu
❍ ❍ ❍ ❍
JLabel JButton JFrame JComponent
i nadja£ati njen metod
paintComponent().
Gra£ko programiranje 20.
115
Analizirajte slede¢i program:
import java.awt.*; import javax.swing.*; public class Test extends JFrame { public Test() { add(new MojaKomponenta("Zdravo narode!")); } public static void main(String[] args) { JFrame okvir = new JFrame(); okvir.setSize(300, 300); okvir.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); okvir.setVisible(true); } } class MojaKomponenta extends JComponent { private String poruka; public MojaKomponenta(String poruka) { this.poruka = poruka; } public void paintComponent(Graphics g) { g.drawString(poruka, 20 ,20); } }
❑
Program ima gra²ku, jer se u konstruktoru klase
Test ne sme doda-
vati komponenta.
❑
Program se normalno izvr²ava i prikazuje poruku
Zdravo narode! u
okviru.
❑ ❑
Program se normalno izvr²ava, ali se ni²ta ne prikazuje u okviru. Program bi prikazao poruku
Zdravo narode! u okviru ukoliko bi se
u glavnom metodu zamenio izraz
❑
Program bi prikazao poruku
Zdravo narode! u okviru ukoliko bi se
u glavnom metodu zamenio izraz
narode!").
21.
Analizirajte slede¢i program:
new JFrame() sa new Test(). new JFrame() sa new Test("Zdravo
116
Gra£ko programiranje import java.awt.*; import javax.swing.*; public class Test extends JFrame { public Test() { add(new MojaKomponenta()); } public static void main(String[] args) { JFrame okvir = new Test(); okvir.setSize(300, 300); okvir.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); okvir.setVisible(true); } } class MojaKomponenta extends JComponent { String poruka; public void setPoruka(String poruka) { this.poruka = poruka; } public void paintComponent(Graphics g) { g.drawString(poruka, 20 ,20); } }
❑
Program ima gra²ku, jer se u konstruktoru klase
Test ne sme doda-
vati komponenta.
❑
Program ima gra²ku, jer naredba
poruka ima vrednost null kada se izvr²ava
g.drawString(poruka, 20 ,20) u metodu paintComponent().
❑
Program se normalno izvr²ava, ali se ni²ta ne prikazuje u okviru.
❑
Program bi prikazao poruku u glavnom metodu izraz
Zdravo narode! u okviru ukoliko bi se
new Test() zamenio sa new Test("Zdravo
narode!").
❑
Program bi prikazao poruku izraz
Zdravo narode! u okviru ukoliko bi se
new MojaKomponenta() u konstruktoru klase Test zamenio sa:
(new MojaKomponenta()).setPoruka("Zdravo narode!").
22.
Ako je dat gra£ki kontekst
g tipa Graphics neke komponente, kojom
Gra£ko programiranje
117
se od ovih naredbi rta pravougaonik £ija su ²irina 20 i visina 50 i £iji se gornji levi ugao nalazi u ta£ki (20; 20) te komponente?
23.
❍
g.drawRect(20, 50, 20, 20);
❍ ❍
g.drawRectFill(20, 20, 20, 50);
❍
g.drawRectFill(20, 50, 20, 20);
g.drawRect(20, 20, 20, 50);
Ako je dat gra£ki kontekst
g2 tipa Graphics2D neke komponente, kojim
se od ovih naredbi rta pravougaonik £ija su ²irina 20 i visina 50 i £iji se gornji levi ugao nalazi u ta£ki (20; 20) te komponente?
24.
❑
g2.draw(Rectangle2D(20, 20, 20, 50));
❑
g2.draw(Rectangle2D.Double(20, 20, 20, 50));
❑
g2.draw(new Rectangle2D.Double(20, 20, 20, 50));
❑
g2.draw(new Rectangle2D.Float(20, 20, 20, 50));
❑ ❑
g2.draw(new Rectangle2D.Double(20.0, 20.0, 20.0, 50.0));
❑
g2.draw(new Rectangle2D.Float(20.0F, 20.0F, 20.0F, 50.0F));
❑
g2.draw(new Rectangle2D(20, 20, 20, 50));
g2.draw(new Rectangle2D.Float(20.0, 20.0, 20.0, 50.0));
Ako je dat gra£ki kontekst
g2 tipa Graphics2D neke komponente, kojim
se od ovih naredbi konstrui²e ta£ka
t koja se nalazi u donjem desnom
uglu te komponente?
25.
❑
Point2D t = new Point2D(getWidth(), getHeight());
❑
Point2D t = new Point2D.Double(getWidth(), getHeight());
❑
Point2D.Double t = new Point2D.Double(getWidth(), getHeight());
❑ ❑
Point2D t = new Point2D.Double(0, 0);
❑
Point2D t = new Point2D.Double(getWidth(), 0);
❑
Point2D t = new Point2D.Double(getHeight(), getWidth());
Point2D t = new Point2D.Double(0, getHeight());
Kojim se od ovih izraza ispravno konstrui²e objekat boje u Javi?
❑ ❑
new Color(0, 0, 0) new Color(0, 266, 0)
118
26.
Gra£ko programiranje
❑
new Color(255, 255, 255)
❑
new Color(1, 2, 3)
Kojim se od ovih naredbi ispravno odreuje boja pozadine komponente
k?
27.
28.
❑
k.setBackground(Color.PINK);
❑
k.setBackground(new Color(0, 128, 128));
❑
k.setBackground(Color(0, 128, 128));
❑
setBackground(Color.YELLOW)
❑
k.setForeground(Color.RED);
Kojim se od ovih izraza ispravno konstrui²e objekat fonta u Javi?
❑
new Font("SansSerif", Font.BOLD, 36)
❑
new Font("SansSerif", Font.CAPS, 20)
❑
new Font("SansSerif", Font.BOLD, 10.5)
❑
new Font("Serif", Font.BOLD + Font.ITALIC, 12)
❑
new Font("Dialog", Font.PLAIN, 10)
❑
new Font("Cyrillic", Font.PLAIN, 12)
❑
new Font(Serif, Font.PLAIN, 12)
Kojeg tipa se proizvodi dogaaj kada se tasterom mi²a pritisne na neko dugme?
29.
❍
ItemEvent
❍
MouseEvent
❍
MouseMotionEvent
❍
ActionEvent
❍
WindowEvent
Kojeg tipa se proizvodi dogaaj kada se pritisne jedan od tastera mi²a?
❍
ItemEvent
❍
MouseEvent
❍
MouseMotionEvent
Gra£ko programiranje
30.
❍
ActionEvent
❍
WindowEvent
119
Koje su od ovih re£eni a o dogaajima ta£ne?
❑
Komponenta u kojoj se desio neki dogaaj se naziva izvor dogaaja.
❑
Ako komponenta moºe generisati neki dogaaj, svaka nasledni a te komponente moºe generisati isti tip dogaaja.
EventObject.
❑
Sve klase dogaaja su nasledni e klase
❑
Klase dogaaja i interfejsi rukovala a dogaaja se nalaze u paketu
java.events.
❑
Ime klase dogaaja u Javi je standardnog oblika
Event, a in-
terfejsa rukovao a odgovaraju¢eg dogaaja je oblika
31.
32.
Svaki objekat dogaaja ima metod
❍
getSource()
❍
getActionCommand()
❍
getTimeStamp()
❍
getWhen()
Odgovaraju¢i metod za obradu dogaaja (npr. lazi se u
33.
Listener.
.
actionPerformed()) na-
.
❍
objektu izvora dogaaja
❍
objektu rukovao a dogaaja
❍
objektima izvora i rukovao a dogaaja
❍
klasi
Object
❍
klasi
EventObject
Koje su od ovih re£eni a o rukovao ima dogaaja ta£ne?
❑
Svaka klasa dogaaja u Javi ima odgovaraju¢i interfejs rukovao a dogaaja.
❑
Klasa rukovao a dogaaja mora implementirati interfejs rukovao a odgovaraju¢eg dogaaja.
120 ❑
Gra£ko programiranje Jednom izvoru dogaaja moºe biti pridruºeno vi²e rukovao a dogaaja.
❑
Jedan rukovala dogaaja moºe obraivati dogaaje iz vi²e izvora.
❑
Rukovala dogaaja se automatski pridruºuje izvoru dogaaja prema tipu dogaaja koje obrauje.
34.
Koja od ovih naredbi objektu
ijskog dogaaja
35.
dugme pridruºuje objekat rukovao a ak-
rukovalacDugmeta?
❍
dugme.addListener(rukovalacDugmeta);
❍
dugme.addActionListener(rukovalacDugmeta);
❍
dugme.addActionEventListener(rukovalacDugmeta);
❍
dugme.addEventListener(rukovalacDugmeta);
Koji interfejs treba implementirati radi obrade ak ijskog dogaaja pritiska tasterom mi²a na dugme?
36.
37.
❍
ButtonListener
❍
ButtonPressedListener
❍
MouseListener
❍
ActionListener
Rukovala ak ijskog dogaaja mora biti objekat tipa
❍
ActionEvent
❍
ActionListener
❍
EventObject
❍
WindowListener
Analizirajte slede¢i program:
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Test extends JFrame { public Test() {
.
Gra£ko programiranje
121
JButton dugmeOK = new JButton("OK"); add(dugmeOK); dugmeOK.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("Dugme OK je pritisnuto"); } }); } public static void main(String[] args) { JFrame okvir = new Test(); okvir.setSize(300, 300); okvir.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); okvir.setVisible(true); } }
❍
Program ima logi£ku gre²ku, jer nijedan rukovala ak ijskog dogaaja dugmeta nije pridruºen dugmetu OK.
❍
Program se normalno izvr²ava i svaki put kada se pritisne na dugme OK u okviru prikazuje se poruka
❍
Program se normalno izvr²ava, ali se ni²ta ne prikazuje u okviru.
❍
Program se normalno izvr²ava prikazuju¢i dugme OK u okviru, ali ne i poruku
38.
Dugme OK je pritisnuto.
Dugme OK je pritisnuto kada se pritisne na dugme OK.
Analizirajte slede¢i program:
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Test extends JFrame implements ActionListener { public Test() { JButton dugmeOK = new JButton("OK"); add(dugmeOK); } public void actionPerformed(ActionEvent e) { System.out.println("Dugme OK je pritisnuto"); } public static void main(String[] args) { JFrame okvir = new Test();
122
Gra£ko programiranje okvir.setSize(300, 300); okvir.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); okvir.setVisible(true); } }
❍ ❍
import java.awt.event.* je suvi²na, jer je njen efekat obuhva¢en deklara ijom import java.awt.*. Deklara ija
Program ima gre²ku, jer klasa ruje klasu
❍
Test ne moºe istovremeno da pro²i-
JFrame i implementira interfejs ActionListener.
Program se normalno izvr²ava i svaki put kada se pritisne na dugme OK u okviru prikazuje se poruka
❍
Program se normalno izvr²ava prikazuju¢i dugme OK u okviru, ali ne i poruku
39.
Dugme OK je pritisnuto.
Dugme OK je pritisnuto kada se pritisne na dugme OK.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
Analizirajte slede¢i program:
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Test extends JFrame { public Test() { JButton dugmeOK = new JButton("OK"); JButton dugmeNOK = new JButton("Nije OK"); add(dugmeOK); add(dugmeNOK); dugmeOK.addActionListener(this); dugmeNOK.addActionListener(this); } public void actionPerformed(ActionEvent e) { System.out.println("Jedno od dva dugmeta je pritisnuto"); } public static void main(String[] args) { JFrame okvir = new Test(); okvir.setSize(300, 300); okvir.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); okvir.setVisible(true); } }
Gra£ko programiranje ❍
123
Program ima gre²ku u redovima 12 i 13, jer dve razli£ite komponente ne mogu imati isti rukovala njihovim dogaajima.
❍
Program ima gre²ku u redovima 12 i 13, jer klasa mentira interfejs
❍
Test ne imple-
ActionListener.
Program ima gre²ku u redu 16, jer metod
actionPerformed() ima
pogre²an potpis.
❍
Program ima gre²ku u redu 21, jer se objekat tipa izrazom
❍
Test dobijen
new Test() dodeljuje promenljivoj okvir tipa JFrame.
Program se normalno izvr²ava prikazuju¢i dva dugmeta u okviru, ali ne i poruku
Jedno od dva dugmeta je pritisnuto kada se pritisne
na bilo koje od ova dva dugmeta u okviru.
40.
Analizirajte slede¢i program:
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Test extends OkvirRukovalac { JButton dugmeOK = new JButton("OK"); public Test() { add(dugmeOK); dugmeOK.addActionListener(this); } public void actionPerformed(ActionEvent e) { super.actionPerformed(e); if (e.getSource() == dugmeOK) System.out.println("Pritisnuto dugme OK"); } public static void main(String[] args) { OkvirRukovalac okvir = new Test(); okvir.setSize(200, 100); okvir.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); okvir.setVisible(true); } } class OkvirRukovalac extends JFrame implements ActionListener {
124
Gra£ko programiranje JButton dugmeNOK = new JButton("Nije OK"); public OkvirRukovalac() { setLayout(new FlowLayout()); add(dugmeNOK); dugmeNOK.addActionListener(this); } public void actionPerformed(ActionEvent e) { if (e.getSource() == dugmeNOK) System.out.println("Pritisnuto dugme NOK"); } }
❑
Program u okviru prikazuje dugme NOK levo od dugmeta OK.
❑
Program prikazuje poruku
Pritisnuto dugme OK kada se u okviru
tasterom mi²a pritisne dugme OK.
❑
Program prikazuje poruku
Pritisnuto dugme NOK kada se u okviru
tasterom mi²a pritisne dugme NOK.
❑
Ukoliko se izostavi prva naredba todu
super.actionPerformed(e) u me-
actionPerformed() klase Test, ne prikazuje se poruka Pritisnuto
dugme NOK kada se u okviru tasterom mi²a pritisne dugme NOK.
41.
Koja od ovih re£i
❍
ActionAdapter
❍
MouseAdapter
❍
WindowAdapter
nije
ime adapterske klase?
Gra£ko programiranje
125
Programski zada i 1.
Napisati program kojim se prikazuje slika kamiona.
2.
Napisati program kojim se prikazuje slika ²ahovske table.
3.
Napisati program kojim se prikazuje slika akvarijuma sa ribi ama. Ribi e treba da imaju slu£ajnu boju i da budu okrenute levo ili desno na slu£ajan na£in.
4.
Napisati program kojim se simulira jednostavan kalkulator sa opera ijama sabiranja, oduzimanja, mnoºenja i deljenja.
5.
Napisati program kojim se prikazuje digitalni sat i ta£no vreme na njemu.
6.
Napisati program kojim se predskazuje sudbina tako ²to se prikazuje jedna slu£ajno odabrana iz niza sudbina.
7.
Napisati program kojim se prikazuje kvadrat £ija se boja moºe menjati i koji se moºe pomerati tasterima na tastaturi.
8.
Napisati program kojim se simulira igranje na tabli sa kliznim plo£i ama.
Pri tome, igra£ svoj slede¢i potez zadaje preko tastature, a
efekat njegovog poteza se prikazuje gra£ki pomeranjem ºeljenog broja na prazno mesto.
9.
Napisati
gra£ki
plo£i ama.
program kojim se simulira igranje na tabli sa kliznim
Igra£ svoj slede¢i potez zadaje pritiskom tastera mi²a na
plo£i u koju ºeli da pomeri i ta plo£i a se zatim pomera na prazno mesto.
10.
Napisati program kojim se realizuje jednostavan gra£ki editor za ureivanje teksta.
126 11.
Gra£ko programiranje
Napisati program kojim se realizuje anima ija ve¢eg broja lopti asko£i a koje se na slu£ajan na£in kre¢u i odbijaju unutar jednog pravougaonika.
Pored toga, ukoliko se tasterom mi²a pritisne u tom
pravougaoniku, sve lopti e treba da krenu prema mestu pritiska.
12.
Napisati program kojim se prikazuje analogni sat i ta£no vreme na njemu.
Deo II
Re²enja
127
Glava
1 Uvod u Java programiranje Odgovori na pitanja 1. ❍ ✓ ❍
Softver Hardver
❍
Operativni sistem
❍
Windows
✓ 2. ❍ ❍ ❍ ❍
3. ❍ ✓ ❍
Softver Hardver Operativni sistem Windows
Hardver Pro esor (CPU)
❍
Memorija
❍
Disk
4. ❍ ❍ ✓ ❍
naredbi podataka naredbi i podataka
129
130 ❍
5. ❍ ✓ ❍
Uvod u Java programiranje teksta
4 8
❍
16
❍
32
✓ 6. ❍
ma²inskom jeziku
❍
engleskom jeziku
❍
prirodnom jeziku
❍
jeziku visokog nivoa
7. ❍
Operativni sistemi
❍
Pro esori
❍ ✓ ❍
Ljudi
✓ 8. ❍
Prevodio i (kompajleri)
Java bajtkod
❍
Java objektni kod
❍
Java aplet
❍
Java aplika ija
9. ❍
Test.txt
❍ ✓ ❍
Test.class
❍
Main.java
❍
Main.txt
10. ❍
Test.java
.java
❍ ✓ ❍
.obj
❍
.exe
.class
Uvod u Java programiranje ✓ 11. ❍
javac Test.java
❍
compile Test.java
❍
prevedi Test.java
❍
javap Test.java
12. ❍
javac Test
❍ ✓ ❍
izvrsi Test
❍
java Test.class
✓ 13. ❑
java Test
NetBeans
❑
DOS
❑ ✓ ❑
Windows
❑
Linux
DrJava
131
Glava
2 Uvod u programski jezik Java Odgovori na pitanja 1. ❍ ❍ ❍ ✓ ❍ 2. ❍ ❍ ✓ ❍ ❍ ✓ 3. ❍ ❍
promenljivih pro edura programa objekata
promenljive pro edure klase ma²ine
obeleºja (atributi) i mogu¢nosti (pona²anje) sastavni delovi i izgled
❍
broj i oblik
❍
identika ija i na£in upotrebe
4. ❍ ✓ ❍ ❍
zameniti pro²iriti popraviti
133
134 ❍
5. ❍ ✓ ❍ ❍ ❍ ✓ 6. ❍ ❍ ❍ ❍ ✓ 7. ❑ ✓ ❑ ✓ ❑ ✓ ❑
8. ❑ ❑ ✓ ❑ ❑ ✓ ❑ 9. ❑ ❑ ✓ ❑ ✓ ❑
Uvod u programski jezik Java ukloniti
nazivima paketima modulima folderima
import export module package
Po konven iji, u Javi se imena paketa pi²u svim malim slovima. Deklara ija
package nije obavezna.
Deklara ija
import nije obavezna.
Klase u paketu
java.lang se automatski dodaju u program.
/** tekst komentara */ // tekst komentara -- tekst komentara /* tekst komentara */ ** tekst komentara **
program se ne¢e prevesti zato ²to je napisan lo²im stilom program ¢e se brºe izvr²avati zato ²to je napisan dobrim stilom program ¢e biti £itljiviji zato ²to je napisan dobrim stilom program ¢e imati manji broj gre²aka zato ²to je napisan dobrim stilom
✓ ❑
10. ❍ ✓ ❍ ❍ ❍
program ¢e se lak²e modikovati zato ²to je napisan dobrim stilom
ta£kom (.) ta£kom-zapetom (;) zapetom (,) zvezdi om (*)
Glava
3 Osnovni elementi jezika Java Odgovori na pitanja ✓ 1. ❑ ✓ ❑ ✓ ❑
public static void
✓ ❑
class
❑
taˇ cno
2. ❑ ✓ ❑
9x ekran
✓ ❑
brojStudenata
❑
znak+ili-
3. ❑
3praseta
❑ ✓ ❑
tri praseta
✓ ❑
bzvz
4. ❍ ❍
preˇ cnik
spe i£ne i generalne
elobrojne i realne
135
136 ❍ ✓ ❍ ✓ 5. ❍
Osnovni elementi jezika Java numeri£ke i tekstualne primitivne i klasne
long
❍
int
❍
short
❍
byte
✓ 6. ❑
float
❑
int
❑ ✓ ❑
long
❑
boolean
7. ❍ ✓ ❍
double
jedan bajt dva bajta
❍
tri bajta
❍
£etiri bajta
8. ❑ ✓ ❑
taˇ cno
✓ ❑
false
❑
0
❑
1
❑
netaˇ cno
true
✓ 9. ❑
kredit
❑
Kredit
❑ ✓ ❑
KREDIT
❑
KamatnaStopa
❑
kamatna_stopa
kamatnaStopa
Osnovni elementi jezika Java ✓ 10. ❑ ✓ ❑
int dužina; int širina; int dužina, širina;
❑
int dužina; širina;
❑
int dužina, int širina;
11. ❑ ❑ ❑ ✓ ❑ ✓ ❑ ✓ ❑
12. ❍ ✓ ❍
System.out.println(’Java je kul!’); System.println("Java je kul!"); System.out.writeln("Java je kul!"); System.out.println("Java je kul!"); System.out.print("Java je kul!"); System.out.printf("Java je kul!");
17 = x; x = 17;
❍
x := 17;
❍
x == 17;
13. ❍ ❍ ✓ ❍
int x = ’17’;
❍
int x = 17.0;
14. ❍ ✓ ❍
int x == 17; int x = 17;
10 11
❍
11:25
❍
12
15. ❑ ✓ ❑ ✓ ❑
1/2 1.0 / 2 1.0 / 2.0
❑ ✓ ❑
(double) (1 / 2)
✓ ❑
1 / 2.0
(double) 1 / 2
137
138
Osnovni elementi jezika Java
16. ❍ ❍ ❍ ✓ ❍
2%1
17. ❑ ❑ ❑ ✓ ❑
a / b * b
✓ ❑
15 % 4 25 % 5 37 % 6
a / (b * b) 1.0 * a / b * b 1.0 * a / (b * b) (double) a / (b * b)
18. ❑ ❑ ❑ ✓ ❑ ✓ ❑
float f = -34;
19. ❍ ❍ ❍ ✓ ❍
x je 5 i y je 6
❍ ✓ 20. ❑ ✓ ❑ ✓ ❑ ✓ ❑ ✓ ❑
21. ❍ ❍ ❍ ✓ ❍
int t = 23; short s = 10; int t = (int)false; int t = 4.5;
x je 6.0 i y je 6.0 x je 6 i y je 6 x je 5.5 i y je 5 x je 5.5 i y je 5.0
i = i + (2 - 1); i = i + 1; i += 1; i = 1 + i; i++;
Program prikazuje
Mesec je 09 na ekranu.
Program prikazuje
Mesec je 9 na ekranu.
Program prikazuje
Mesec je 9.0 na ekranu.
Program ima gre²ku, jer
09 nije ispravno napisana oktalna vrednost.
Osnovni elementi jezika Java 22. ❍ ❍ ✓ ❍ ❍
23. ❍ ❍ ✓ ❍ ❍
System.terminate(0) System.halt(0) System.exit(0) System.stop(0)
Math.power(x, y) Math.exp(x, y) Math.pow(x, y) Math.pow(y, x)
✓ 24. ❍ ❍ ❍ ❍
char c = ’A’;
25. ❑ ❑ ✓ ❑ ✓ ❑
string s = ’A’;
26. ❍ ❍ ✓ ❍
’a’
27. ❑ ❑ ✓ ❑ ✓ ❑ ✓ ❑
String s = "neki string";
✓ 28. ❑ ❑ ❑
String s3 = s1 - s2;
char c = ’23’; char c = "A"; char c = "23";
String s = ’23’; String s = "A"; String s = "23";
’v’ Ni²ta, jer dolazi do prekida izvr²avanja programa usled gre²ke.
String s3 = s1 + s2; s1 >= s2 int i = s1.length; s1.charAt(0) = ’?’;
s1 == s2 boolean b = s1.compareTo(s2);
139
140
Osnovni elementi jezika Java
✓ ❑ ✓ ❑
char c = s1[0];
❑
char c = s1.charAt(s1.length() - 1);
char c = s1.charAt(s1.length());
29. ❍ ❍ ✓ ❍ ❍
0
✓ 30. ❍ ❍ ❍ ❍ ❍
javaprogram
✓ 31. ❑ ✓ ❑ ❑ ❑ ✓ ❑
i = Integer.parseInt(s);
✓ 32. ❑ ✓ ❑ ❑ ❑
d = Double.parseDouble(s);
33. ❑ ✓ ❑ ✓ ❑ ❑
s = d;
34. ❍ ❍
<
1
true false
Java program Java_program Javaprogram gre²ka
i = (new Integer(s)).intValue(); i = Integer.valueOf(s).intValue(); i = Integer.valueOf(s); i = (int)(Double.parseDouble(s));
d = (new Double(s)).doubleValue(); d = Double.valueOf(s).doubleValue(); d = (double)(Integer.parseInt(s));
s = d.toString(); s = (new Double(d)).toString(); s = (Double.valueOf(d)).toString();
=<
Osnovni elementi jezika Java ❍ ✓ ❍
>=
❍
0) || (x < 0)
❑
(x != 0) || (x = 0)
❑
(-10 < x < 0)
37. ❍ ✓ ❍
!(x > 0) && (x > 0)
1 < x < 100 && x < 0 ((x < 100) && (x > 1)) || (x < 0)
❍
((x < 100) && (x > 1)) && (x < 0)
❍
(x != 0) || (x = 0)
❍
(1 > x > 100) || (x < 0)
❍
(1 < x < 100) || (x < 0)
38. ❍ ✓ ❍
9 10
❍
11
❍
12
39. ❍
9
❍ ✓ ❍
10
❍
12
11
141
142
Osnovni elementi jezika Java
✓ 40. ❍
10
❍
0
❍
10
❍
20
❍
Programski fragment ima gre²ku.
Osnovni elementi jezika Java
143
Re²enja zadataka 1.
Listing 3.1: ImePrezime.java
public class ImePrezime { public static void main(String[] args) { System.out.println(" System.out.println(" System.out.println(" System.out.println(" System.out.println("
+----------------+"); | |"); | Dejan Živkovi´ c |"); | |"); +----------------+");
} }
2.
Listing 3.2: Ini ijali.java
public class Inicijali { public static void main(String[] args) { System.out.println(" System.out.println(" System.out.println(" System.out.println(" System.out.println(" System.out.println(" System.out.println(" System.out.println(" System.out.println(" System.out.println(" System.out.println("
******* ** ** ** ** ** ** ** ** ** ** ** ** ** ** *******
} }
3.
Listing 3.3: A4.java
public class A4 { public static void main(String[] args) { final double CM_PO_INˇ CU = 2.54; double širinaPapira = 21.0;
** **"); **"); ************"); **"); **"); **"); **"); **"); **"); **"); ************");
144
Osnovni elementi jezika Java double visinaPapira = 29.7; System.out.print("Format A4 (210 x 297mm) u inˇ cima: "); System.out.printf("%5.2f x %5.2f\n", širinaPapira/CM_PO_INˇ CU, visinaPapira/CM_PO_INˇ CU); }
}
4.
Listing 3.4: CelFar.java
import java.util.*; public class CelFar { public static void main(String[] args) { int f; // broj stepeni Farenhajta int c; // broj stepeni Celzijusa // Ulaz programa se dobija preko tastature Scanner tastatura = new Scanner(System.in); // Uˇ citavanje stepena Celzijusa od korisnika System.out.print("Unesite stepene Celzijusa: "); c = tastatura.nextInt(); // Izraˇ cunavanje stepena Farenhajta po formuli f = 9*c/5 + 32; // Prikazivanje rezultata na ekranu System.out.print(c + " stepeni Celzijusa = "); System.out.println(f + " stepeni Farenhajta"); } }
5.
Listing 3.5: Kamata.java
import java.util.*; public class Kamata { public static void main(String[] args) { double depozit; // poˇ cetni depozit double kamatnaStopa; // godišnja kamatna stopa
Osnovni elementi jezika Java double iznosKamate;
145 // novˇ cani iznos kamate
Scanner tastatura = new Scanner(System.in); System.out.print("Unesite poˇ cetni depozit: "); depozit = tastatura.nextDouble(); System.out.print("Unesite godišnju kamatnu stopu: "); kamatnaStopa = tastatura.nextDouble(); iznosKamate = depozit * kamatnaStopa; depozit = depozit + iznosKamate; System.out.println(); System.out.print("Novˇ cani iznos godišnje kamate: "); System.out.println(iznosKamate); System.out.print("Uve´ can depozit nakon jedne godine: "); System.out.println(depozit); } }
6.
Listing 3.6: PravougliTrougao.java
import java.util.*; public class PravougliTrougao { public static void main(String[] args) { double kateta1, kateta2, hipotenuza; // strane trougla long poˇ cetnoVreme; // poˇ cetak izvršavanja, u milisekundama long završnoVreme; // kraj izvršavanja, u milisekundama double protekloVreme; // razlika vremena, u sekundama poˇ cetnoVreme = System.currentTimeMillis(); Scanner tastatura = new Scanner(System.in); System.out.print("Program raˇ cuna hipotenuzu "); System.out.println("pravouglog trougla za date katete."); System.out.print("Unesite dužinu jedne katete: "); kateta1 = tastatura.nextDouble(); System.out.print("Unesite dužinu druge katete: "); kateta2 = tastatura.nextDouble(); hipotenuza = Math.sqrt(kateta1*kateta1 + kateta2*kateta2);
146
Osnovni elementi jezika Java
System.out.println(); System.out.print("Hipotenuza pravouglog trougla sa "); System.out.print("katetama " + kateta1); System.out.print(" i " + kateta2 + " je: "); System.out.printf("%8.2f\n", hipotenuza); završnoVreme = System.currentTimeMillis(); protekloVreme = (završnoVreme - poˇ cetnoVreme)/1000.0; System.out.println(); System.out.print("Vreme izvršavanja u sekundama je: "); System.out.println(protekloVreme); } }
7.
Listing 3.7: Tren.java
import java.util.*; public class Tren { public static void main(String[] args) { int pakovanoVreme; // pakovani podaci vremenskog trenutka int godina, mesec, dan, sat, minut; // Ulaz programa se dobija preko tastature Scanner tastatura = new Scanner(System.in); // Uˇ citavanje podataka vremenskog trenutka System.out.print("Unesite dan, mesec, godinu: "); dan = tastatura.nextInt(); mesec = tastatura.nextInt(); godina = tastatura.nextInt(); System.out.print("Unesite sat, minut: "); sat = tastatura.nextInt(); minut = tastatura.nextInt(); // Pomeranje ulevo bitova vremenskih podataka godina = godina >> 16) & 0x0000000f; dan = (pakovanoVreme >>> 11) & 0x0000001f; sat = (pakovanoVreme >>> 6) & 0x0000001f; minut = pakovanoVreme & 0x0000003f; // Prikazivanje raspakovanog sadržaja na ekranu System.out.print("Raspakovano vreme: "); System.out.print(dan + "." + mesec + "." + godina); System.out.println(" " + sat + ":" + minut); } }
147
Glava
4 Upravlja£ke naredbe Odgovori na pitanja 1. ❑
if (r != 0) System.out.println(r * r * Math.PI);
❑ ✓ ❑
if (r >= 0) System.out.println(r * r * Math.PI);
✓ ❑
if (r > 0) { System.out.println(r * r * Math.PI); }
❑
if {r > 0} System.out.println(r * r * PI);
❑ ✓ ❑
if (r 0) System.out.println(r * r * Math.PI);
if (r > 0) System.out.println(Math.pow(r, 2) * Math.PI);
2. ❍ ✓ ❍
x > 0 i y > 0
❍
x < 0 i z < 0
❍
Ni²ta se ne prikazuje.
3. ❍ ❍
x < 0 i z > 0
Programski fragment ima gre²ku i ne moºe se izvr²iti. Programski fragment se normalno izv²ava, ali se ni²ta ne prikazuje na ekranu.
✓ ❍
Programski fragment se normalno izv²ava i prikazuje se na ekranu.
149
To je taˇ cno!
150 4. ❍ ❍ ❍ ✓ ❍ 5. ❍ ✓ ❍ ❍ ❍
Upravlja£ke naredbe Fragment A ima gre²ku. Fragment B ima gre²ku. Oba fragmenta imaju gre²ku. Oba fragmenta su ispravna, ali je fragment B bolji.
Ni²ta se ne¢e prikazati.
Plata je ve´ ca od 3000 Plata je ve´ ca od 4000 Plata je ve´ ca od 3000 u jednom redu i Plata je ve´ ca od 4000 u slede¢em redu.
6. ❍ ❍ ❍ ✓ ❍ 7. ❍ ✓ ❍ ❍
8. ❍ ❍ ✓ ❍ 9. ❍ ✓ ❍ ❍
10. ❍ ✓ ❍ ❍ 11. ❍
cena = 0.0 Ni²ta se ne¢e prikazati. Programski fragment ima gre²ku i ne¢e se izvr²iti.
cena = 15.0
Ni²ta se ne prikazuje.
s1 i s2 ukazuju na isti string s1 i s2 ukazuju na razliˇ cite stringove
Ni²ta se ne prikazuje.
s1 i s2 ukazuju na isti string s1 i s2 ukazuju na razliˇ cite stringove
Ni²ta se ne prikazuje.
s1 i s2 imaju isti sadržaj s1 i s2 imaju razliˇ cit sadržaj
Ni²ta se ne prikazuje.
s1 i s2 imaju isti sadržaj s1 i s2 imaju razliˇ cit sadržaj
Ni²ta se ne prikazuje.
Upravlja£ke naredbe
151
❍
s1 i s2 ukazuju na isti string
❍ ✓ ❍
s1 i s2 imaju isti sadržaj s1 i s2 imaju razliˇ cit sadržaj
12. ❍ ✓ ❍
1
❍
3
❍
4
13. ❍ ✓ ❍
2
abcd a
❍
aA
❍
A
14. ❍ ✓ ❍
ocena je 15 ocena je 15 u jednom redu i ocena je 15 ili 30 u slede¢em redu.
❍
Ni²ta se ne¢e prikazati.
❍
Pograšna ocena
15. ❍
Programski fragment ima gre²ku, jer nedostaju potrebne naredbe
break.
❍
Programski fragment ima gre²ku, jer nedostaje slu£aj naredbi
✓ ❍
16. ❍
switch.
Programski fragment ima gre²ku, jer kontrolna promenljiva naredbi
❍
switch ne moºe biti tipa double.
Programski fragment nema gre²aka.
Programski fragment ima gre²ku i ne¢e se izvr²iti.
❍
20
❍ ✓ ❍
Ni²ta se ne¢e prikazati.
17. ❍
default u
Stalno ¢e se prikazivati
9
20 u beskona£noj petlji.
d u
152
Upravlja£ke naredbe
✓ ❍
10
❍
11
❍
0
✓ 18. ❑ ❑
Uslov
brojaˇ c < 10 je uvek ta£an u ta£ki A.
Uslov
brojaˇ c < 10 je uvek neta£an u ta£ki A.
❑
Uslov
brojaˇ c < 10 je uvek ta£an u ta£ki B.
❑
Uslov
brojaˇ c < 10 je uvek neta£an u ta£ki B.
❑ ✓ ❑
Uslov
brojaˇ c < 10 je uvek ta£an u ta£ki C.
Uslov
brojaˇ c < 10 je uvek neta£an u ta£ki C.
19. ❍ ✓ ❍
9 10
❍
11
❍
0
20. ❍ ✓ ❍
Programski fragment ima gre²aku i ne¢e se izvr²iti.
i = 5
❍
Ni²ta se ne¢e prikazati.
❍
Stalno ¢e se prikazivati
21. ❍
Programski fragment ima gre²ku, jer nedostaje tre¢i deo (zavr²ni a) u zagradama
❍
for petlje.
Programski fragment ima gre²ku, jer kontrolna promenljiva zagradama
❍ ✓ ❍
i = 1 u beskona£noj petlji.
for petlje ne moºe biti tipa double.
Po²to je uslov
d < 10 uvek ta£an, for petlja je beskona£na.
Programski fragment nema gre²aka i normalno se izvr²ava.
22. ❍
10
❍
11
❍
12
❍ ✓ ❍
13 45
d u
Upravlja£ke naredbe ✓ 23. ❍ ❍ ✓ 24. ❍ ❍
25. ❑
153
Da. Ne.
Da. Ne.
Program se ne¢e izvr²iti, jer se ta£ka-zapeta nalazi odmah iza zagrada
for petlje.
❑ ✓ ❑
Program ¢e se bez problema izvr²iti i prikaza¢e se
4 na ekranu.
Program ¢e se bez problema izvr²iti i prikaza¢e se
14 na ekranu.
✓ ❑
U programu je
for petlja ekvivalentna petlji for (i = 0; i < 10;
i++) { };.
26. ❍ ✓ ❍
Da. Ne.
27. ❍ ✓ ❍
5
❍
7
❍
8
✓ 28. ❍ ❍
29. ❍ ❍ ❍ ✓ ❍ 30. ❍
6
Da. Ne.
20 19 18 17 16 20 15 10 5 15 10 5 0 15 10 5
Naredba sa oznakom
spetlja.
❍ ✓ ❍
Naredba sa oznakom
upetlja.
Naredba sa oznakom
nastavak.
❍
Nijedna naredba, nego se program odmah zavr²ava.
154 ✓ 31. ❍
Upravlja£ke naredbe Kontrola se prenosi u ta£ku B radi izvr²avanja slede¢e itera ije spolja²nje petlje sa oznakom
❍
spetlja.
Kontrola se prenosi u ta£ku A radi izvr²avanja slede¢e itera ije unutra²nje petlje sa oznakom
upetlja.
nastavak.
❍
Naredba sa oznakom
❍
Nijedna naredba, nego se program odmah zavr²ava.
Upravlja£ke naredbe
155
Re²enja zadataka 1.
Listing 4.1: Uskrs1.java
import java.util.*; public class Uskrs1 { public static void main(String[] args) { Scanner tastatura = new Scanner(System.in); System.out.print("Unesite godinu za datum Uskrsa: "); int g = tastatura.nextInt(); int int int int int
a b c d e
= = = = =
g % 19; g % 4; g % 7; (19 * a + 24) % 30; (2 * b + 4 * c + 6 * d + 5) % 7;
System.out.print("Katoliˇ cki Uskrs je u nedelju, "); int f = 22 + d + e; if (f > 31) System.out.printf("%d. aprila %d.\n", f - 31, g); else System.out.printf("%d. marta %d.\n", f, g); } }
2.
Listing 4.2: Uskrs2.java
import java.util.*; public class Uskrs2 { public static void main(String[] args) { Scanner tastatura = new Scanner(System.in); System.out.print("Unesite godinu za datum Uskrsa: "); int g = tastatura.nextInt(); int a = g % 19; int b = g % 4;
156
Upravlja£ke naredbe int c = g % 7; int d = (19 * a + 24) % 30; int e = (2 * b + 4 * c + 6 * d + 5) % 7; int f = 22 + d + e; int m = 3; if (f > 31) { f = f - 31; m = 4; } if (g == 1954 || g == 1981 || g == 2049 || g == 2076) f = f - 7; System.out.print("Katoliˇ cki Uskrs je u nedelju, "); System.out.printf("%d. %d. %d.\n", f, m, g); }
}
3.
Listing 4.3: PismoGlava1.java
import java.util.*; public class PismoGlava1 { public static void main(String[] args) { final int PISMO = 0; int brojBacanja, ishodBacanja; int brojPisma, brojGlava; Scanner tastatura = new Scanner(System.in); while(true) { System.out.print("Unesite broj bacanja novˇ ci´ ca: "); brojBacanja = tastatura.nextInt(); if (brojBacanja == 0) break; brojPisma = 0; brojGlava = 0; for (int i = 0; i < brojBacanja; i++) { ishodBacanja = (int)(Math.random() + 0.5); if (ishodBacanja == PISMO) brojPisma++; else brojGlava++; } System.out.print("Broj pisma Broj glava "); System.out.print("Broj pisma/Broj bacanja "); System.out.println("Broj glava/Broj bacanja ");
Upravlja£ke naredbe
157
System.out.printf("%8d %12d %17.2f %25.2f\n", brojPisma, brojGlava, (double)brojPisma/brojBacanja, (double)brojGlava/brojBacanja); } } }
4.
Listing 4.4: ZmijskeO£i.java
public class ZmijskeOˇ ci { public static void main(String[] args) { int brojBacanja = 0; // brojaˇ c bacanja dve kocke int kocka1; // broj koji je pao na prvoj kocki int kocka2; // broj koji je pao na drugoj kocki do { kocka1 = (int)(Math.random()*6) + 1; // baci prvu kocku kocka2 = (int)(Math.random()*6) + 1; // baci drugu kocku brojBacanja++; // uraˇ cunati bacanje System.out.printf("%4d. bacanje: kocka1 = %d, kocka2 = %d\n", brojBacanja, kocka1, kocka2); } while ((kocka1 != 1) || (kocka2 != 1)); } }
5.
Listing 4.5: Niz3n1.java
import java.util.*; public class Niz3n1 { public static void main(String[] args) { int n;
// elementi niza
Scanner tastatura = new Scanner(System.in); System.out.print("Unesite poˇ cetni broj niza: "); n = tastatura.nextInt(); while(n = return "I" else return "";
+ d2r(n 100) + d2r(n 50) + d2r(n 10) + d2r(n 5) + d2r(n 1) + d2r(n
- 500); - 100); - 50); - 10); - 5); - 1);
} /* // Pomo´ cni nerekurzivni metod za pretvaranje // decimalnog broja u rimski broj private String d2r(int n) { String r = ""; while (n >= 1000){ r = r + "M"; n = n while (n >= 500) { r = r + "D"; n = n while (n >= 100) { r = r + "C"; n = n while (n >= 50) { r = r + "L"; n = n while (n >= 10) { r = r + "X"; n = n while (n >= 5) { r = r + "V"; n = n while (n >= 1) { r = r + "I"; n = n return r; }
-
1000;} 500;} 100;} 50;} 10;} 5;} 1;}
*/ // Statiˇ cki metod za sabiranje dva rimska broja: // RimskiBroj z = RimskiBroj.zbir(x, y) public static RimskiBroj zbir(RimskiBroj a, RimskiBroj b) { return new RimskiBroj(a.n + b.n); } // Objektni metod za sabiranje dva kompleksna broja: // RimskiBroj z = x.dodaj(y); public RimskiBroj dodaj(RimskiBroj a) { return new RimskiBroj(this.n + a.n); } // Statiˇ cki metod za proizvod dva rimska broja: // RimskiBroj z = RimskiBroj.proizvod(x, y) public static RimskiBroj proizvod(RimskiBroj a, RimskiBroj b) { return new RimskiBroj(a.n * b.n); }
Klase i objekti
187
// Objektni metod za proizvod dva kompleksna broja: // RimskiBroj z = x.pomnoži(y); public RimskiBroj pomnoži(RimskiBroj a) { return new RimskiBroj(this.n * a.n); } public static void main(String[] args) { RimskiBroj x = new RimskiBroj("xxxiiii"); // 34 System.out.println("x = " + x.toInt()); System.out.println("x = " + x); // x.toString() RimskiBroj y = new RimskiBroj("mdclxvi"); //1666 System.out.println("y = " + y.toInt()); System.out.println("y = " + y); // y.toString() System.out.println(); System.out.println( // RimskiBroj.zbir(x, y).toString() "x+y = " + RimskiBroj.zbir(x, y)); System.out.println( "x+y = " + RimskiBroj.zbir(x, y).toInt()); System.out.println( // x.dodaj(y).toString() "x+y = " + x.dodaj(y)); System.out.println( "x+y = " + x.dodaj(y).toInt()); System.out.println(); System.out.println( // RimskiBroj.proizvod(x, y).toString() "x*y = " + RimskiBroj.proizvod(x, y)); System.out.println( "x*y = " + RimskiBroj.proizvod(x, y).toInt()); System.out.println( // x.pomnoži(y).toString() "x*y = " + x.pomnoži(y)); System.out.println( "x*y = " + x.pomnoži(y).toInt()); } }
5.
Listing 6.5: DveKo ke2.java
public class DveKocke2 { public static void main(String[] args) { System.out.println("Zbir dve kocke System.out.println("--------------
Proseˇ can broj bacanja"); ---------------------");
188
Klase i objekti
for (int i = 2; i < 13; i++) System.out.printf("%7d %24.2f\n", i, prosekZaZbir(i)); } public static int baciZaZbir(int zbir) { int brojBacanja = 0; // brojaˇ c bacanja dve kocke KockaZaIgru kocka1 = new KockaZaIgru(); // prva kocka KockaZaIgru kocka2 = new KockaZaIgru(); // druga kocka do { kocka1.baci(); kocka2.baci(); brojBacanja++;
// baci prvu kocku // baci drugu kocku // uraˇ cunati bacanje
} while ((kocka1.broj + kocka2.broj) != zbir); return brojBacanja; } public static double prosekZaZbir(int zbir) { final int BROJ_PONAVLJANJA = 100000; int ukupnoBacanja = 0; // ukupan broj bacanja za // dati zbir dve kocke for (int i = 0; i < BROJ_PONAVLJANJA; i++) ukupnoBacanja = ukupnoBacanja + baciZaZbir(zbir); return (double)ukupnoBacanja/BROJ_PONAVLJANJA; } } class KockaZaIgru { public int broj;
// broj koji je pao
public KockaZaIgru() { baci(); }
// konstruktor bez parametara // poziv metoda baci()
public KockaZaIgru(int n) { broj = n; }
// konstruktor sa parametrom
public void baci() {
// „bacanje” kocke
Klase i objekti
189
broj = (int)(Math.random()*6) + 1; } }
6.
Listing 6.6: PismoGlava.java
import java.util.*; public class PismoGlava { public static void main(String[] args) { int brojBacanja; // broj bacanja novˇ ci´ ca Brojaˇ c brojaˇ cPisama = new Brojaˇ c(); // broj palih pisama Brojaˇ c brojaˇ cGlava = new Brojaˇ c(); // broj palih glava Scanner tastatura = new Scanner(System.in); System.out.print("Unesite broj bacanja novˇ ci´ ca: "); brojBacanja = tastatura.nextInt(); while (brojBacanja > 0) { brojaˇ cPisama.reset(); brojaˇ cGlava.reset(); for (int i = 0; i < brojBacanja; i++) if (Math.random() < 0.5) brojaˇ cPisama.uve´ caj(); else brojaˇ cGlava.uve´ caj(); System.out.print("U " + brojBacanja + " bacanja, palo je "); System.out.println(brojaˇ cPisama.getBroj() + " pisama."); System.out.print("U " + brojBacanja + " bacanja, palo je "); System.out.println(brojaˇ cGlava.getBroj() + " glava."); System.out.println(); System.out.print("Unesite broj bacanja novˇ ci´ ca: "); brojBacanja = tastatura.nextInt(); } } } class Brojaˇ c { private int broj;
// poˇ cetna vrednost je 0
public void uve´ caj() { broj++; }
190
Klase i objekti
public void reset() { broj = 0; } public int getBroj() { return broj; } }
Glava
7 Osnovne strukture podataka Odgovori na pitanja ✓ 1. ❍ ❍ ❍
a[2]
❍
a(3)
a(2) a[3]
2. ❑ ✓ ❑ ✓ ❑
int[] a = new int[2];
✓ ❑
int a() = new int[2];
✓ 3. ❑ ✓ ❑
int[] a = new int(2); int a = new int[2];
i (int)(Math.random() * 100)
❑
(int)(Math.random() * 100 + 1)
❑ ✓ ❑
Math.random() * 100
❑
i + 6.5
4. ❍
i + 10
Program ima gre²ku, jer je duºina niza
191
a premala.
192
Osnovne strukture podataka
❍
Program ima gre²ku, jer elementi niza
❍ ✓ ❍
Program ima gre²ku, jer element
a nisu ini ijalizovani.
a[0] nije denisan.
Program nema gre²aka i normalno se izvr²ava prikazuju¢i
a[0] je
0 na ekranu.
5. ❑ ✓ ❑
int i = new int(30); double[] d = new double[30];
✓ ❑
int[] i = {3, 4, 3, 2};
❑
char[] c = new char();
❑ ✓ ❑
char[] c = new char{’a’, ’b’, ’c’, ’d’}; char[] c = {’a’, ’b’};
6. ❍
0
❍ ✓ ❍
3
❍
5
7. ❍ ❍ ✓ ❍
4
Program prikazuje
0 1 2 3 4 na ekranu.
Program prikazuje
4 na ekranu.
Program ima gre²ku, jer ¢e se koristiti nepostoje¢i element poslednjoj naredbi
❍
Program ima gre²ku, jer promenljiva u metodu
8. ❍ ✓ ❍
i u poslednjoj naredbi print
main ne¢e imati nijednu vrednost.
Program prikazuje
120 200 16 na ekranu.
Program prikazuje
120 200 14 na ekranu.
❍
Program prikazuje
120 200 22 na ekranu.
❍
Program ima gre²ku, jer umesto
9. ❍
1 2 3
❍ ✓ ❍
1 1 1
❍
0 1 3
0 1 2
a[5] u
print u metodu main.
016 treba pisati 16.
Osnovne strukture podataka 10. ❍
1 2 3
❍ ✓ ❍
1 1 1
❍
0 1 3
✓ 11. ❍
0 1 2
1 2 3 4
❍
0 0
❍
0 0 3 4
❍
0 0 0 0
12. ❍ ✓ ❍
1 2 3 4
❍
0 0 3 4
❍
0 0 0 0
13. ❍ ❍ ✓ ❍
193
0 0
Program prikazuje
1 2 3 4 na ekranu.
Program prikazuje
0 0 na ekranu.
Program ima gre²ku kod naredbe
x = new int[2], jer je promenljiva
x deklarisana da bude final i ne moºe se menjati.
❍
Elementi niza da bude
14. ❍
x se ne mogu menjati, jer je promenljiva x deklarisana
final.
Programski fragment ima gre²ku, jer se promenljiva
lista ne moºe
menjati nakon ²to joj se dodeli vrednost.
✓ ❍
Programski fragment nema gre²aka i normalno se izvr²ava. Drugom naredbom se novi niz dodeljuje promenljivoj
❍
lista.
Programski fragment ima gre²ku, jer se promenljivoj
lista dode-
ljuje novi niz.
❍
Programski fragment ima gre²ku, jer se promenljivoj
lista dode-
ljuje novi niz razli£ite duºine od prvog.
15. ❍
Program ima gre²ku kod naredbe dodeljuje promenljivoj
a.
a = new int[2], jer se novi niz
194 ❍
Osnovne strukture podataka Program ima gre²ku kod naredbe
println, jer a[1] nije ini ijalizo-
vano.
✓ ❍ ❍ ✓ 16. ❍ ❍ ❍ ❍
17. ❍ ❍ ❍ ✓ ❍ 18. ❍ ❍ ✓ ❍ ❍ ❍ ✓ 19. ❍ ❍ ❍ ❍
20. ❍
Program na ekranu prikazuje
a[1] je 0.
Program na ekranu prikazuje
a[1] je 1.
b = Arrays.copyOf(a, a.length); b = Arrays.copyOf(a); Arrays.copyOf(b, a, a.length); Arrays.copyOf(a, b);
kopija datog niza kopija prvog elementa datog niza duºina datog niza referen a na dati niz
Poruka o gre²ki.
1 1 2 2 2 1 1 2
1 2 3 4 5 5 4 3 2 1 5 4 1 2 3 1 2 5 4 3
Program ima gre²ku, jer je nepravilan argument
new double[]{3,
3} u prvom pozivu metoda xMetod().
❍
Program ima gre²ku, jer je nepravilan argument drugom pozivu metoda
✓ ❍
new double[5] u
xMetod().
Program ima gre²ku, jer je nepravilan argument
new double[3]{1,
2, 3} u tre¢em pozivu metoda xMetod().
❍
Program ima gre²ku, jer ¢e sve vrednosti niza prilikom izvr²avanja drugog poziva metoda
a imati vrednost null
xMetod().
Osnovne strukture podataka 21. ❍ ✓ ❍
stek memorija hip memorija
❍
ke² memorija
❍
virtuelna memorija
22. ❍ ❍ ❍ ✓ ❍
kopija tog niza kopija prvog elementa tog niza duºina tog niza referen a na taj niz
23. ❍ ❍ ❍ ✓ ❍
return 1;
24. ❍ ✓ ❍
1 2 3 4 5
❍
5 4 1 2 3
❍
1 2 5 4 3
25. ❍ ✓ ❍
1 2 3 4 5
❍
5 4 1 2 3
❍
1 2 5 4 3
26. ❍ ❍ ✓ ❍
return {1, 2, 3}; return int[]{1, 2, 3}; return new int[]{1, 2, 3};
5 4 3 2 1
5 4 3 2 1
Promenljiva
k sadrºi niz od 10 elobrojnih vrednosti.
Promenljiva
k sadrºi niz od 10 objekata klase Krug.
Promenljiva
k sadrºi referen u na niz od 10 promenljivih klasnog
tipa
❍
27. ❍ ❍
195
Krug.
Promenljiva
args[0] args[1]
k sadrºi objekat klase Krug pre£nika 10.
196 ✓ ❍ ❍
28. ❑ ❑ ❑ ✓ ❑ ✓ ❑ 29. ❍
Osnovne strukture podataka args[2] args[3]
public void prikaži(String...
niska, double...
public void prikaži(double...
broj, String ime)
public void double...
❍
broj)
public void prikaži(int n, double...
broj)
Program ima gre²ku, jer je nepravilan poziv
prosek(d) u prvoj
println.
Program ima gre²ku, jer je nepravilan poziv u drugoj naredbi
❍
prikaži(double d1, double d2)
public void prikaži(double...
naredbi
broj)
prosek(1, 2, 2, 1, 4)
println.
Program ima gre²ku, jer je nepravilan poziv
prosek(new double[]{1,
2, 3}) u tre¢oj naredbi println.
❍
Program ima gre²ku, jer je nepravilan poziv
prosek(1.0, 2.0, 2.0,
1.0) u £etvrtoj naredbi println.
✓ ❍
Program se izvr²ava bez gre²ke i prosek datih brojeva se ta£no izra£unava.
❍
Program se izvr²ava bez gre²ke, ali se prosek datih brojeva ne izra£unava ta£no.
30. ❍ ✓ ❍ ❍ ❍
Arrays(lotoBrojevi) Arrays.sort(lotoBrojevi) Arrays.sorts(lotoBrojevi) Arrays.sortArray(lotoBrojevi)
31. ❍ ❍ ❍ ✓ ❍ ❍
0
32. ❍
char[][] z = {’a’, ’b’};
1 1 2 2
Osnovne strukture podataka
197
❍
char[2][2] z = {{’a’, ’b’}, {’c’, ’d’}};
❍ ✓ ❍
char[2][] z = {{’a’, ’b’}, {’c’, ’d’}}; char[][] z = {{’a’, ’b’}, {’c’, ’d’}};
33. ❍ ✓ ❍
4 i 4
❍
5 i 4
❍
5 i 5
4 i 5
34. ❍
Program ima gre²ku, jer je
new boolean[3][] nepravilno.
❍
Program ima gre²ku, jer ¢e
x[2][2] imati vrednost null.
❍
Program se normalno izvr²ava i na ekranu se prikazuje
x[2][2] je
null.
✓ ❍
Program se normalno izvr²ava i na ekranu se prikazuje
false.
x[2][2] je
198
Osnovne strukture podataka
Re²enja zadataka 1.
Listing 7.1: Sito.java
/** * Program prikazuje niz svih prostih brojeva manjih od dateg broja m ci postupak Eratostenovog sita: redom iskljuˇ citi proizvode * koriste´ * svih prostih brojeva manjih od kvadratnog korena od m, a oni brojevi * koji preostanu su prosti. Granica niza prostih brojeva m dobija se * preko komandnog reda. **/ public class Sito { public static void main(String[] args) { if (args.length == 0) { System.out.print("Granica niza prostih brojeva "); System.out.println("nije navedena u komandnom redu!"); System.exit(-1); } int m = Integer.parseInt(args[0]); // Logiˇ cki niz koji ukazuje da li su brojevi manji od m // (indeksi elemenata tog niza) prosti ili ne boolean[] prostBroj = new boolean[m]; // Na poˇ cetku se pretpostavlja da su svi brojevi prosti, // dok se ne otkrije suprotno for (int i = 0; i < m; i++) prostBroj[i] = true; // Za odre¯ divanje svih prostih brojeva manjih od m, treba // iskljuˇ citi proizvode svih brojeva manjih od kvadratnog // korena od m int n = (int) Math.ceil(Math.sqrt(m)); // Za svaki ceo broj i od 2 do n: // Ako i jeste prost, onda svi njegovi proizvodi nisu prosti, // pa ih treba iskljuˇ citi u nizu prostBroj. // Ako i nije prost, onda su njegovi proizvodi ve´ c iskljuˇ ceni // nekim manjim prostim faktorom broja i, pa ovaj sluˇ caj // treba zanemariti. for (int i = 2; i < n; i++) { if (prostBroj[i]) for (int j = 2*i; j < m; j = j + i) prostBroj[j] = false; }
Osnovne strukture podataka
199
// Prikazivanje niza prostih brojeva manjih od m po 10 u redu System.out.println("Niz prostih brojeva manjih od " + m + ":"); int j = 0; for (int i = 2; i < m; i++) if (prostBroj[i]) { System.out.print(i + " "); j++; if (j == 10) { System.out.println(); j = 0; } } } }
2.
Listing 7.2: Igraivota.java
import java.util.*; public class IgraŽivota { public static void main(String[] args) { System.out.println("Ovo je igra života!\n"); System.out.print("Unesite veliˇ cinu (broj vrsta "); System.out.print("i kolona) kolonije: "); Scanner tastatura = new Scanner(System.in); int n = tastatura.nextInt(); Kolonija kol = new Kolonija(n); System.out.print("Unesite broj organizama na poˇ cetku: "); int brojOrganizama = tastatura.nextInt(); System.out.print("Unesite vrste i kolone "); System.out.println("organizama na poˇ cetku - "); for (int i = 0; i < brojOrganizama; i++) { System.out.print("Organizam " + (i+1) + ": "); int v = tastatura.nextInt(); int k = tastatura.nextInt(); kol.zauzmi´ Celiju(v,k); } System.out.println(); int g = 0;
200
Osnovne strukture podataka while (true) { System.out.println("Generacija " + g + ": "); kol.prikaži(); System.out.print("Slede´ ca generacija (d/n)? "); String novaGen = tastatura.next(); if (novaGen.equals("n")) break; kol.novaGen(); g++; } }
} class Kolonija { private int n; private boolean[][] m;
// veliˇ cina kolonije // matrica ´ celija: // true = zauzeta ´ celija // false = prazna ´ celija
// Konstruktor public Kolonija(int n) { this.n = n; m = new boolean[n+2][n+2]; // prazne ´ celije oko ivice matrice } public void zauzmi´ Celiju(int i, int j) { m[i][j] = true; } public void novaGen() { ´elija boolean[][] m1 = new boolean[n+2][n+2]; // novo stanje c int bs; // broj suseda ´ celije for (int i = 1; i = 0 && k 0 ? kanal[0] - 1 : kanal[1]; System.out.print("TV " + marka + ", ekran: " + ekran); System.out.println(", kanal: " + kanal[0]); } return kanal[0]; } } class DVDPlejer extends Ure¯ daj implements DaljinskiUpravljaˇ c { private String disk; // ime diska u plejeru private int[] zvuk; // min zvuk = 0
253
254
Posebne klase i interfejsi // zvuk[0] = trenutni zvuk // zvuk[1] = max zvuk public DVDPlejer(String marka, int[] zvuk) { this.marka = marka; this.zvuk = zvuk; } public boolean ukljuˇ ciIskljuˇ ci() { ukljuˇ cen = !ukljuˇ cen; System.out.print("DVD plejer " + marka); System.out.println(", " + (ukljuˇ cen ? "u" : "is") + "kljuˇ cen."); return ukljuˇ cen; } public int zvukMinus() { if (ukljuˇ cen) { zvuk[0] = Math.max(0, zvuk[0] - 1); System.out.print("DVD plejer " + marka); System.out.println(", zvuk: " + zvuk[0]); } return zvuk[0]; } public int zvukPlus() { if (ukljuˇ cen) { zvuk[0] = Math.min(zvuk[0] + 1, zvuk[1]); System.out.print("DVD plejer " + marka); System.out.println(", zvuk: " + zvuk[0]); } return zvuk[0]; } public void ugasiZvuk() { if (ukljuˇ cen) { zvuk[0] = 0; System.out.print("DVD plejer " + marka); System.out.println(", zvuk: " + zvuk[0]); } } public void ubaciDisk(String d) {
Posebne klase i interfejsi
255
if (ukljuˇ cen) { if (disk == null) disk = d; System.out.print("DVD plejer " + marka); System.out.println(", disk: \"" + disk + "\""); } } public void prikažiDisk() { if (ukljuˇ cen) { if (disk == null) { System.out.print("DVD System.out.println(", } else { System.out.print("DVD System.out.println(", } }
plejer " + marka); nema diska");
plejer " + marka); prikazuje se: \"" + disk + "\"");
} public void izbaciDisk() { if (ukljuˇ cen) { disk = null; System.out.print("DVD plejer " + marka); System.out.println(", nema diska"); } } }
7.
Listing 9.7: PovezanaLista2.java
public class PovezanaLista2 { private ElementListe prvi; private ElementListe posl; private int n;
// prvi element liste // poslednji element liste // broj elemenata liste
// Ugnjež¯ dena klasa za elemente liste // Napomena: pristupni metodi za njena polja nisu potrebni private class ElementListe { private Object sadržaj;
// sadržaj elementa liste
256
Posebne klase i interfejsi private ElementListe sled; // pokazivaˇ c na slede´ ci // element liste // Konstruktor public ElementListe(Object o) { sadržaj = o; } // String reprezentacija elementa liste public String toString() { return sadržaj.toString(); } } // Podrazumevani konstruktor za formiranje prazne liste public PovezanaLista2() {} // Dužina liste public int dužina() { return n; } // Ispitivanje da li je lista prazna public boolean praznaLista() { return prvi == null; } // Dodavanje objekta na kraj liste public void dodaj(Object o) { // Konstruisati novi element liste ElementListe noviElem = new ElementListe(o); if (praznaLista()) prvi = posl = noviElem; else { posl.sled = noviElem; posl = noviElem; } n++; } // Ispitivanje da li je dati objekat u listi public boolean na¯ di(Object o) { ElementListe elem; for (elem = prvi; elem != null; elem = elem.sled) { if (elem.sadržaj.equals(o))
Posebne klase i interfejsi
257
break; } return (elem != null); } // String reprezentacija povezane liste public String toString() { String s = ""; for (ElementListe elem = prvi; elem != posl; elem = elem.sled) { s = s + elem.toString() + ", "; } if (posl != null) s = s + posl.toString(); return s; } // ,,Klijentska strana’’ klase radi testiranja public static void main(String[] args) { // Konstruisanje prazne liste PovezanaLista2 lis = new PovezanaLista2(); // Dodavanje nekih elemenata u listu Object o = new Integer(17); lis.dodaj(o); lis.dodaj(23); lis.dodaj(31); lis.dodaj(47); // Prikazivanje elemenata liste System.out.println("Sadržaj liste:"); System.out.println(lis); System.out.println("Dužina liste: " + lis.dužina()); // Traženje objekta u listi int x = 23; System.out.println(); System.out.print("Objekat " + x + " se "); if (lis.na¯ di((Integer)x) == false) System.out.print("ne "); System.out.println("nalazi u listi"); } }
8.
Listing 9.8: Igraivota1.java
import java.util.*;
258
Posebne klase i interfejsi
public class IgraŽivota1 { public static void main(String[] args) { System.out.println("Ovo je igra života!\n"); System.out.print("Unesite veliˇ cinu (broj vrsta "); System.out.print("i kolona) kolonije: "); Scanner tastatura = new Scanner(System.in); int n = tastatura.nextInt(); Kolonija kol = new Kolonija(n); System.out.print("Unesite broj organizama na poˇ cetku: "); int brojOrganizama = tastatura.nextInt(); System.out.print("Unesite vrste i kolone "); System.out.println("organizama na poˇ cetku - "); for (int i = 0; i < brojOrganizama; i++) { System.out.print("Organizam " + (i+1) + ": "); int v = tastatura.nextInt(); int k = tastatura.nextInt(); kol.zauzmi´ Celiju(v,k); } System.out.println(); int g = 0; while (true) { System.out.println("Generacija " + g + ": "); kol.prikaži(); System.out.print("Slede´ ca generacija (d/n)? "); String novaGen = tastatura.next(); if (novaGen.equals("n")) break; kol.novaGen(); g++; } } } class Kolonija { private int n; private ´ Celija[][] m;
// veliˇ cina kolonije // matrica ´ celija
// Ugnjež¯ deni nabrojivi tip za stanje ´ celija private enum Stanje { PRAZNO, ZAUZETO;
Posebne klase i interfejsi public String toString() { return (ordinal() == 0) ? " " : "*"; } } // Ugnjež¯ dena klasa za ´ celije matrice private class ´ Celija { private int vrsta, kolona; // koordinate ´ celije u matrici private Stanje sadržaj; // prazna ili zauzeta ´ celija private int susedi; // broj suseda ´ celije // Konstruktor private ´ Celija(int vrsta, int kolona) { this.vrsta = vrsta; this.kolona = kolona; this.sadržaj = Stanje.PRAZNO; } private void brojSuseda() { int bs = 0; for (int i = vrsta - 1; i 0 && t[iPM][jPM - 1] == p) { i = iPM; j = jPM - 1; dozvoljenPotez = true; } if (jPM < n - 1 && t[iPM][jPM + 1] == p) { i = iPM; j = jPM + 1; dozvoljenPotez = true; } if (dozvoljenPotez) { t[iPM][jPM] = t[i][j]; t[i][j] = 0; iPM = i; jPM = j; } return dozvoljenPotez; }
} class IzgledTable extends JPanel { private KliznaTabla tabla; private int stranaPloˇ cice = 40; private int stranaTable; private int stranaPanela;
// // // //
tabla koja se dužina strane dužina strane dužina strane
prikazuje ploˇ cice u pikselima table u pikselima panela u pikselima
// Konstruktor public IzgledTable(KliznaTabla tabla) { this.tabla = tabla; stranaTable = stranaPloˇ cice * tabla.getN(); stranaPanela = stranaTable + 2 * stranaPloˇ cice; } public int getStranaPanela() { return stranaPanela; }
Gra£ko programiranje
293
private void nacrtajPloˇ cicu(Graphics2D g2d, int p, int i, int j) { int x = stranaPloˇ cice + (stranaPloˇ cice * j); int y = stranaPloˇ cice + (stranaPloˇ cice * i); if (p == 0 ) { g2d.setPaint(Color.BLACK); g2d.drawRect(x, y, stranaPloˇ cice, stranaPloˇ cice); g2d.fillRect(x, y, stranaPloˇ cice, stranaPloˇ cice); } else { g2d.setPaint(Color.WHITE); g2d.fillRect(x, y, stranaPloˇ cice, stranaPloˇ cice); g2d.setPaint(Color.BLACK); g2d.drawRect(x, y, stranaPloˇ cice, stranaPloˇ cice); g2d.drawString(p + "", x + 15, y + 25); } } public void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D)g; g2d.setPaint(Color.YELLOW); g2d.fillRect(0, 0, stranaPanela, stranaPanela); int[][] t = tabla.getT(); for (int i = 0; i < t.length; i++) for (int j = 0; j < t[i].length; j++) nacrtajPloˇ cicu(g2d, t[i][j], i, j); } public void nacrtajTablu() { this.repaint(); } }
9.
Listing 10.9: IgraKliznaTabla2.java
import javax.swing.*; import java.awt.*; import java.awt.event.*; public class IgraKliznaTabla2 { public static void main(String[] args) {
294
Gra£ko programiranje
KliznaTabla tabla = new KliznaTabla(4); IzgledTable panelTable = new IzgledTable(tabla); JFrame okvir = new JFrame("Klizna tabla"); okvir.setSize(300, 300); okvir.add(panelTable); okvir.setLocationRelativeTo(null); okvir.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); okvir.setVisible(true); } } class KliznaTabla { private private private private
int n; int[][] t; int iPM; int jPM;
// // // //
veliˇ cina klizne table matrica ploˇ cica vrsta praznog mesta kolona praznog mesta
// Konstruktor za konstruisanje poˇ cetne konfiguracije table // sa ploˇ cicama u opadaju´ cem numeriˇ ckom redosledu. public KliznaTabla(int n) { this.n = n; t = new int[n][n]; // Ploˇ cice se tabli dodaju u ,,obrnutom’’ redosledu int p = n*n - 1; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { t[i][j] = p; p--; } // Pam´ cenje vrste i kolone u kojima se nalazi prazno mesto iPM = n - 1; jPM = n - 1; } // Metod getN() vra´ ca veliˇ cinu klizne table public int getN() { return n; } // Metod getTabla() vra´ ca matricu ploˇ cica public int[][] getT() { return t; }
Gra£ko programiranje // Metod pomeri() pomera ploˇ cicu p na prazno mesto. // Rezultat metoda je false ukoliko potez nije dozvoljen. public boolean pomeri(int p) { int i = -1; // vrsta u kojoj se nalazi p int j = -1; // kolona u kojoj se nalazi p // Da li je ploˇ cica p susedna sa praznim mestom? boolean dozvoljenPotez = false; if (iPM > 0 && t[iPM - 1][jPM] == p) { i = iPM - 1; j = jPM; dozvoljenPotez = true; } if (iPM < n - 1 && t[iPM + 1][jPM] == p) { i = iPM + 1; j = jPM; dozvoljenPotez = true; } if (jPM > 0 && t[iPM][jPM - 1] == p) { i = iPM; j = jPM - 1; dozvoljenPotez = true; } if (jPM < n - 1 && t[iPM][jPM + 1] == p) { i = iPM; j = jPM + 1; dozvoljenPotez = true; } if (dozvoljenPotez) { t[iPM][jPM] = t[i][j]; t[i][j] = 0; iPM = i; jPM = j; } return dozvoljenPotez; } } class DugmePloˇ cice extends JButton implements ActionListener { private KliznaTabla tabla; // model table kojoj pripada ploˇ cica private IzgledTable panel; // izgled table kojoj pripada ploˇ cica // Konstruktor public DugmePloˇ cice(KliznaTabla tabla, IzgledTable panel) {
295
296
Gra£ko programiranje this.tabla = tabla; this.panel = panel; addActionListener(this); } public void actionPerformed(ActionEvent d) { String oznaka = getText(); if (!oznaka.equals("")) { // nije kliknuto na prazno mesto int p = Integer.parseInt(oznaka); // broj na kliknutom dugmetu tabla.pomeri(p); panel.nacrtaj(); } }
} class IzgledTable extends JPanel { private KliznaTabla tabla; // tabla koja se prikazuje private DugmePloˇ cice[][] tablaDugmadi; // matrica dugmadi table // Konstruktor public IzgledTable(KliznaTabla tabla) { this.tabla = tabla; int n = tabla.getN(); tablaDugmadi = new DugmePloˇ cice[n][n]; setLayout(new GridLayout(n, n)); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { tablaDugmadi[i][j] = new DugmePloˇ cice(tabla, this); add(tablaDugmadi[i][j]); } nacrtaj(); } public void nacrtaj() { int n = tabla.getN(); int[][] t = tabla.getT(); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { if (t[i][j] == 0) { tablaDugmadi[i][j].setBackground(Color.BLACK);
Gra£ko programiranje
297
tablaDugmadi[i][j].setText(""); } else { tablaDugmadi[i][j].setBackground(Color.YELLOW); tablaDugmadi[i][j].setText("" + t[i][j]); } } } }
10.
Listing 10.10: Editor.java
import import import import
java.io.*; java.awt.*; java.awt.event.*; javax.swing.*;
public class Editor extends JFrame { public static void main(String[] args) { JFrame okvir = new OkvirEditora(); okvir.setSize(700, 500); okvir.setLocationRelativeTo(null); okvir.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); okvir.setVisible(true); } } class OkvirEditora extends JFrame { private static final String opisPrograma = "Vrlo jednostavan editor koji pokazuje osnovne mogu´ cnosti\n" + "za rad sa menijima u Javi. U programskoj traci za menije\n" + "se nalaze dva menija \"Datoteka\" i \"Pomo´ c\" koji sadrže\n" + "dodatne opcije za rad sa tekstualnom datotekom.\n" + " Verzija: 0.1alfa"; private JTextArea poljeTeksta; // polje za editovanje teksta private File datoteka; // datoteka koja se edituje
// Konstruktor za konstruisanje glavnog prozora sa menijem i // poljem u kojem se može unositi i menjati tekst. public OkvirEditora() { super("Jednostavan editor: nesaˇ cuvan tekst"); try {
298
Gra£ko programiranje UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName()); } catch(Exception ex) { } setIconImage(Toolkit.getDefaultToolkit().getImage( getClass().getResource("images/Notepad.gif"))); setJMenuBar(napraviMeni()); poljeTeksta = new JTextArea(25,50); poljeTeksta.setMargin(new Insets(3,5,0,0)); // prostor oko teksta JScrollPane pomeraˇ cTeksta = new JScrollPane(poljeTeksta); setContentPane(pomeraˇ cTeksta); } // Konstruisanje programske trake za menije koja sadrži menije // Datoteka za opcije Nova, Otvori, Saˇ cuvaj i Kraj; // Pomo´ c za opciju Opis. private JMenuBar napraviMeni() { // Rukovalac za opcije menija ActionListener rukovalac = new ActionListener() { // Metod koji se poziva kada se izabere opcija iz menija public void actionPerformed(ActionEvent doga¯ daj) { String opcija = doga¯ daj.getActionCommand(); if (opcija.equals("Nova")) poˇ cni(); else if (opcija.equals("Otvori ...")) otvori(); else if (opcija.equals("Saˇ cuvaj ...")) saˇ cuvaj(); else if (opcija.equals("Kraj")) završi(); else if (opcija.equals("Opis")) opiši(); } }; JMenu meniDatoteka = new JMenu("Datoteka"); meniDatoteka.setMnemonic(’D’); JMenuItem opcijaNova = new JMenuItem("Nova"); opcijaNova.setMnemonic(’N’); opcijaNova.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_N, ActionEvent.CTRL_MASK)); opcijaNova.setIcon(new ImageIcon( getClass().getResource("images/New.gif"))); opcijaNova.addActionListener(rukovalac);
Gra£ko programiranje meniDatoteka.add(opcijaNova); JMenuItem opcijaOtvori = new JMenuItem("Otvori ..."); opcijaOtvori.setMnemonic(’O’); opcijaOtvori.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_O, ActionEvent.CTRL_MASK)); opcijaOtvori.setIcon(new ImageIcon( getClass().getResource("images/Open.gif"))); opcijaOtvori.addActionListener(rukovalac); meniDatoteka.add(opcijaOtvori); JMenuItem opcijaSaˇ cuvaj = new JMenuItem("Saˇ cuvaj ..."); opcijaSaˇ cuvaj.setMnemonic(’S’); opcijaSaˇ cuvaj.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_S, ActionEvent.CTRL_MASK)); opcijaSaˇ cuvaj.setIcon(new ImageIcon( getClass().getResource("images/Save.gif"))); opcijaSaˇ cuvaj.addActionListener(rukovalac); meniDatoteka.add(opcijaSaˇ cuvaj); meniDatoteka.addSeparator(); JMenuItem opcijaZavrši = new JMenuItem("Kraj"); opcijaZavrši.setMnemonic(’K’); opcijaZavrši.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_K, ActionEvent.CTRL_MASK)); opcijaZavrši.addActionListener(rukovalac); meniDatoteka.add(opcijaZavrši); JMenu meniPomo´ c = new JMenu("Pomo´ c"); meniPomo´ c.setMnemonic(’P’); JMenuItem opcijaOpis = new JMenuItem("Opis"); opcijaOpis.setMnemonic(’O’); opcijaOpis.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_P, ActionEvent.CTRL_MASK)); opcijaOpis.addActionListener(rukovalac); meniPomo´ c.add(opcijaOpis); JMenuBar trakaZaMeni = new JMenuBar(); trakaZaMeni.add(meniDatoteka); trakaZaMeni.add(meniPomo´ c); return trakaZaMeni; } private void poˇ cni() {
299
300
Gra£ko programiranje poljeTeksta.setText(""); datoteka = null; setTitle("Jednostavan editor: nesaˇ cuvan tekst"); } private void saˇ cuvaj() { JFileChooser izbor = new JFileChooser(); // dijalog za izbor // datoteke File izabranaDatoteka; // poˇ cetno ime datoteke u dijalogu if (datoteka == null) izabranaDatoteka = new File("ImeDatoteke.txt"); else izabranaDatoteka = new File(datoteka.getName()); izbor.setSelectedFile(izabranaDatoteka); izbor.setDialogTitle("Izaberite datoteku radi ˇ cuvanje teksta"); int opcijaIzbora = izbor.showSaveDialog(this); if (opcijaIzbora != JFileChooser.APPROVE_OPTION) return; // dijalog je zatvoren bez izabrane datoteke izabranaDatoteka = izbor.getSelectedFile(); if (izabranaDatoteka.exists()) { // zameniti postoje´ cu datoteku? int odgovor = JOptionPane.showConfirmDialog(this, "Datoteka \"" + izabranaDatoteka.getName() + "\" ve´ c postoji.\nDa li želite da je zamenite?", "Potvrdite zamenu datoteke", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE ); if (odgovor != JOptionPane.YES_OPTION) return; // korisnik ne želi da zameni datoteku } PrintWriter pisaˇ c; try { pisaˇ c = new PrintWriter(new FileWriter(izabranaDatoteka)); pisaˇ c.print(poljeTeksta.getText()); // pisanje teksta iz // polja u datoteku pisaˇ c.close(); } catch (Exception ex) { JOptionPane.showMessageDialog(this, "Greška prilikom otvaranja ili pisanja datoteke:\n" + ex); return; } datoteka = izabranaDatoteka; setTitle("Jednostavan editor: " + datoteka.getName()); } public void otvori() { JFileChooser izbor = new JFileChooser(); // dijalog za izbor
Gra£ko programiranje
301
// datoteke izbor.setDialogTitle("Izaberite datoteku radi otvaranja"); izbor.setSelectedFile(null); // poˇ cetno prazno ime // datoteke u dijalogu int opcijaIzbora = izbor.showOpenDialog(this); if (opcijaIzbora != JFileChooser.APPROVE_OPTION) return; // dijalog je zatvoren bez izabrane datoteke File izabranaDatoteka = izbor.getSelectedFile(); BufferedReader ˇ citaˇ c; String tekst = ""; try { ˇ citaˇ c = new BufferedReader(new FileReader(izabranaDatoteka)); while(ˇ citaˇ c.ready()) tekst += ˇ citaˇ c.readLine() + "\n"; ˇ citaˇ c.close(); } catch (Exception ex) { JOptionPane.showMessageDialog(this, "Greška prilikom otvaranja ili ˇ citanja datoteke:\n" + ex); return; } poljeTeksta.setText(tekst); poljeTeksta.setCaretPosition(0); // kursor ide na poˇ cetak teksta datoteka = izabranaDatoteka; setTitle("Jednostavan editor: " + datoteka.getName()); } private void završi() { System.exit(0); } public void opiši() { JOptionPane.showMessageDialog(this, opisPrograma, "Opis programa", JOptionPane.INFORMATION_MESSAGE); } }
11.
Listing 10.11: Lopti e.java
import import import import
java.awt.*; java.awt.geom.*; java.awt.event.*; javax.swing.*;
302
Gra£ko programiranje
public class Loptice { public static void main(String[] args) { JFrame okvir = new JFrame("Loptice skoˇ cice"); // 10 loptica i 30 ms izme¯ du frejmova animacije. okvir.add(new LopticeSkoˇ cice(10, 30)); okvir.pack(); okvir.setLocation(100,100); okvir.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); okvir.setResizable(false); okvir.setVisible(true); } } class LopticeSkoˇ cice extends JComponent { Loptica[] loptice;
// niz loptica koje skaˇ cu u komponenti
// Konstruktor u kojem se konstruišu n loptica i tajmer koji // odbrojava u intervalima od ms milisekundi na osnovu kojih // se realizuje animacija. Pored toga, u konstrukturu se // odre¯ duje podrazumevana veliˇ cina komponente 400 x 400 piksela // i rukovalac pritiska na taster miša. LopticeSkoˇ cice(int n, int ms) { setPreferredSize(new Dimension(400,400)); loptice = new Loptica[n]; for (int i = 0; i < loptice.length; i++) loptice[i] = new Loptica(0, 400, 0, 400); // Ako se klikne u komponenti, sve loptice treba da krenu // prema mestu na kome se nalazi strelica miša. addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent doga¯ daj) { for (Loptica l : loptice) l.kreniPrema(doga¯ daj.getX(), doga¯ daj.getY()); } }); // Tajmer kojim se realizuje animacija pozivanjem metoda // repaint() u periodiˇ cnim intervalima od ms milisekundi. Timer t = new Timer(ms, new ActionListener() { public void actionPerformed(ActionEvent doga¯ daj) { repaint(); }
Gra£ko programiranje
303
}); t.start(); // startovanje tajmera } // kraj konstruktora
// Periodiˇ cno crtanje komponente: sve loptice se najpre // pomeraju duž njihove trajektorije i zatim crtaju. public void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g; // Crtanje pozadine komponente. g2d.setPaint(Color.DARK_GRAY); g2d.fillRect(0, 0, getWidth(), getHeight()); // Realizacija jednog frejma animacije. for (Loptica l : loptice) { l.pomeri(); l.nacrtaj(g2d); } } } class Loptica { private double x, y; // trenutna pozicija loptice private double xmin, xmax; // horizontalne granice pozicije loptice: // xmin