Osnove JAVA Programiranja Zbirka

January 6, 2017 | Author: Doberman Pinscher | Category: N/A
Share Embed Donate


Short Description

Download Osnove JAVA Programiranja Zbirka ...

Description

Dejan šivkovi¢

OSNOVE JAVA PROGRAMIRANJA Zbirka pitanja i zadataka sa re²enjima

UNIVERZITET SINGIDUNUM FAKULTET ZA INFORMATIKU I MENADšMENT

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 Nasleživanje 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

Nasleživanje 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

Igrašivota.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

Igrašivota1.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 utvrživanje znanja iz Java programiranja. knjige

Osnove Java programiranja

Zbirka je prilagožena 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 ponuženih odgovora ozna£enih simbolom

❍ ima samo

jedan ta£an odgovor;  pitanje sa vi²e ponuženih 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 ponuženi 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 pronažene 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 prevoženje 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 Nasleživanje 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 navoženjem 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 izmežu 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 izmežu 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 izmežu 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 izmežu 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 izmežu 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 odrežuje 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 odrežuje koji eo broj izmežu 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 svoženjem 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 odreživanje 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 oslobaža 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 raža 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 takože 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 dože 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 Nasleživanje 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 nasleživanje 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 nasleženu klasu.

❑ ❑

Klasa

A nasležuje klasu B zna£i da je A potklasa od B.

Ako klasa

A nasležuje klasu B, tada objekti klase A sadrºe sva polja

i sve metode klase



Ako klasa

B.

A nasležuje klasu B, tada se svaki objekat klase A podra-

zumeva da je i objekat klase

3.

B.

Pronažite sve gre²ke u slede¢em programu:

85

86

Nasleživanje 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:

Nasleživanje 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 nasležena 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

Nasleživanje 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

nasležene klase.



Sluºbena re£

super ne moºe posluºiti za pozivanje zaklonjenog polja

nasležene 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; } }

Nasleživanje 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 nasležuje 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 prevoženja programa.



Za razre²avanje poziva nadja£anih metoda se primenjuje dinami£ko vezivanje u fazi izvr²avanja programa.

10.

Analizirajte slede¢i program:

90

Nasleživanje 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)

Nasleživanje 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

Nasleživanje 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:

Nasleživanje 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.

Nasleživanje klasa Pronažite 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();

Nasleživanje 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

Nasleživanje 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 nasleživati?



class A { }

x tipa ArrayList?

Nasleživanje klasa ❍

class A { private A(){ } }



final class A { }



class A { protected A(){ } }

97

98

Nasleživanje 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 odrežuje 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 nasležuje apstraktnu klasu moºe biti apstraktna. Klasa koja nasležuje 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 nasležuju 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 nasleženoj klasi ili interfejsu.



Anonimne klase uvek koriste podrazumevani konstruktor bez argumenata nasležene 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 mežusobnog 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 uporeživati 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 urežaj 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

odrežuje 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

.



voženi dogažajima



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)



neodrežene

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 odrežuje 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 dogažaj kada se tasterom mi²a pritisne na neko dugme?

29.



ItemEvent



MouseEvent



MouseMotionEvent



ActionEvent



WindowEvent

Kojeg tipa se proizvodi dogažaj 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 dogažajima ta£ne?



Komponenta u kojoj se desio neki dogažaj se naziva izvor dogažaja.



Ako komponenta moºe generisati neki dogažaj, svaka nasledni a te komponente moºe generisati isti tip dogažaja.

EventObject.



Sve klase dogažaja su nasledni e klase



Klase dogažaja i interfejsi rukovala a dogažaja se nalaze u paketu

java.events.



Ime klase dogažaja u Javi je standardnog oblika

Event, a in-

terfejsa rukovao a odgovaraju¢eg dogažaja je oblika

31.

32.

Svaki objekat dogažaja ima metod



getSource()



getActionCommand()



getTimeStamp()



getWhen()

Odgovaraju¢i metod za obradu dogažaja (npr. lazi se u

33.

Listener.

.

actionPerformed()) na-

.



objektu izvora dogažaja



objektu rukovao a dogažaja



objektima izvora i rukovao a dogažaja



klasi

Object



klasi

EventObject

Koje su od ovih re£eni a o rukovao ima dogažaja ta£ne?



Svaka klasa dogažaja u Javi ima odgovaraju¢i interfejs rukovao a dogažaja.



Klasa rukovao a dogažaja mora implementirati interfejs rukovao a odgovaraju¢eg dogažaja.

120 ❑

Gra£ko programiranje Jednom izvoru dogažaja moºe biti pridruºeno vi²e rukovao a dogažaja.



Jedan rukovala dogažaja moºe obraživati dogažaje iz vi²e izvora.



Rukovala dogažaja se automatski pridruºuje izvoru dogažaja prema tipu dogažaja koje obražuje.

34.

Koja od ovih naredbi objektu

ijskog dogažaja

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 dogažaja pritiska tasterom mi²a na dugme?

36.

37.



ButtonListener



ButtonPressedListener



MouseListener



ActionListener

Rukovala ak ijskog dogažaja 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 dogažaja 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 dogažajima.



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 ureživanje 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: Igrašivota.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: Igrašivota1.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
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF