62001558-ProgramiranjeUJavi

Embed Size (px)

Citation preview

  • 7/29/2019 62001558-ProgramiranjeUJavi

    1/162

    1

    PROGRAMIRANJE U JAVI

    Skripta

  • 7/29/2019 62001558-ProgramiranjeUJavi

    2/162

    2

    Sadraj

    1. Uvod - kako poeti programirati u JAVA jeziku.............................................................................................................. 41. O predmetu .............................................................................................................................................................. 42. Programi i programiranje ........................................................................................................................................ 53. Primjeri jednostavnih Java programa ...................................................................................................................... 64. Objekti i Metode ......................................................... ........................................................... .................................. 75. Kako je konstruiran program iz primjera................................................................................................................. 86. Metoda System.out.println ............................................................ ............................................................. ............ 97. Kako prevesti i pokrenuti Java program ................................................................................................................ 108. Pisanje koda Java programa .................................................................................................................................. 129. Kako rjeavati zadatke........................................................................................................................................... 1310. Zadaci za prvo poglavlje ............................................................ ............................................................. .......... 13

    2. Brojevi i znakovni nizovi (strings) ............................................................................................................................. 151. Cjelobrojne vrijednost (integers) ........................................................................................................................... 152. Varijable ................................................................................................................................................................ 173. Dodjeljivanje (Assignments) ................................................................................................................................. 184. Brojevi s pokretnom zarezom (Floating-point) ..................................................................................................... 215. itanje ulaza koritenjem ConsoleReader objekta ................................................................................................ 226. Znakovni niz - string. ............................................................................................................................................ 247. Zadaci za poglavlje 2 ............................................................. ........................................................... ..................... 28

    3. Objekti i klase ............................................................................................................................................................. 301. to je to objekt? ..................................................................................................................................................... 302. Klasa Student .................................................... ........................................................... .......................................... 313. Vie o klasama....................................................................................................................................................... 384. Reference na objekte (Object References) ............................................................................................................ 405. null vrijednost ........................................................................................................................................................ 426. Identifikatori .......................................................................................................................................................... 427. Zadaci za poglavlje 3 ............................................................. ........................................................... ..................... 43

    4. Grafika ............................................................................................................................................................................ 441. Koritenje grafike .................................................................................................................................................. 442. Applet koji crta linije ............................................................................................................................................. 453. Drugi oblici ........................................................................................................................................................... 494. Boja ....................................................................................................................................................................... 525. Bojanje likova........................................................................................................................................................ 536. Pisanje teksta ......................................................................................................................................................... 547. Smajli .................................................................................................................................................................... 578. itanje ulaza .......................................................................................................................................................... 6110. Zadaci ........................................................... ........................................................... .......................................... 63

    5. ISPITIVANJE UVJETA ............................................................. ........................................................... ..................... 641. Izrazi za donoenje odluka .................................................................................................................................... 642. if naredba s jednom granom .................................................................................................................................. 66

  • 7/29/2019 62001558-ProgramiranjeUJavi

    3/162

    3

    3. Izbor izmeu razliitih alternativa ......................................................................................................................... 684. Tip podataka boolean ............................................................................................................................................ 705. Usporedba stringova .............................................................................................................................................. 736. Blokovi i doseg varijabli ....................................................................................................................................... 797. Zadaci .................................................................................................................................................................... 80

    6. SWITCH IZRAZ I PETLJE ....................................................................................................................................... 821. switch izraz (kontrolna struktura) .................................................................................................................... 822. while petlja ............................................................................................................................................................ 833. do-while petlja ....................................................................................................................................................... 854. for-petlja ................................................................................................................................................................ 875. Kontrola izvravanja petlje - break i continue naredbe ........................................................ ................................ 886. continue naredba......................................................... ........................................................... ................................ 897. Ugnijeene petlje ................................................................................................................................................. 908. Zadaci za poglavlje 6 ............................................................. ........................................................... ..................... 90

    7. DEFINICIJA KLASA ................................................................................................................................................ 921. Statike (static) varijable i metode ........................................................................................................................ 922. Klasa Robot ........................................................................................................................................................... 933. Vie o varijablama i metodama ........................................................................................................................... 1044. final varijable i konstante .................................................................................................................................... 1065. Rekurzija ............................................................................................................................................................. 1076. Zadaci .................................................................................................................................................................. 112

    8. NIZOVI I LISTE ...................................................................................................................................................... 1131. Nizovi (arrays) ............................................................ ........................................................... .............................. 1132. Argument linije naredbe (Command line arguments) ......................................................................................... 1163. Suelje List (List interface). ................................................................................................................................ 1174. Zadaci .................................................................................................................................................................. 120

    9. NADOGRADNJA-NASLIJEIVANJE KLASA .................................................................................................... 1211. Nadogradnja klase (KrivuljaRobot) .......................................................... ........................................................... 1212. Zatieni pristup .................................................................................................................................................. 1253. Kombiniranje dviju srodnih klasa. (Student i Zaposlenik) ................................................... .............................. 1274. Zajedniki okosnica (framework) porodice klasa (GraphApplet primjer).......................................................... 1335. Stablo familije klasa ............................................................................................................................................ 1366. Zadaci .................................................................................................................................................................. 137

    10. Dogaaji (events)........................................................................................................................................................ 1381. Dogaaji .............................................................................................................................................................. 1382. Koritenje unutarnjih klasa (Inner Classes) ......................................................... ................................................ 1433. Tablica klasa dogaaja (event classes) i tablica suelja sluaa (listener interfaces) .......................................... 1474. Koritenje sata (timer) ......................................................................................................................................... 148

    11. Iznimke i tokovi (exceptions and streams) ................................................................................................................. 1521. Iznimke (Exceptions) .......................................................................................................................................... 1522. itanje s tipkovnice ............................................................................................................................................. 1563. itanje iz tekstualne datoteke .............................................................................................................................. 1604. Pisanje u tekstualnu datoteku .............................................................................................................................. 162

  • 7/29/2019 62001558-ProgramiranjeUJavi

    4/162

    1.Uvod

    4

    1. Uvod - kako poeti programirati u JAVA jeziku

    Cilj ovog poglavlja je napisati i pokrenuti jednostavnije Java programe.

    SADRAJ:

    1. O predmetu.2. Programi i programski jezici.

    3. Neki jednostavni Java programi.4. Objekti i metode.

    5. Konstrukcija programa.

    6. Metoda System.out.println.

    7. Kako prevesti i pokrenuti java program.8. Pisanje Java programa.

    9. Kako raditi na raunalu.10. Zadaci za prvo poglavlje.

    1. O predmetu

    Sadraj ovog predmeta je pisanje objektno orijentiranih programa u Java jeziku.

    Java je :

    programski jezik

    vrlo velika biblioteka programskih rutina

    izvrna okolina za izvoenje programa.

    Java biblioteka programskih rutina sastoji se od tisua klasa. Postoje klase za rad s datotekama, klase za rad s 3Dgrafikom, klase za pristup bazama podataka, animaciju web stranica, itd. Moglo bi se rei da se u bibliotekama

    nalazi vei dio onoga to e vam ikada zatrebati u programiranju. Moda ste se dosad susreli s JavaScript jezikomza web stranice. JavaScript nije Java jezik ! Ovaj predmet se zbog ogranienog broja sati ipak mora ograniiti naosnove jezika te na manji dio osnovnih klasa.

    Kao dodatnu literaturu moete koristiti knjigu:

    Beginning Java 2, Ivor Horton , Wrox

    Ako dosad niste programirali bit e potrebno uloiti znaajan trud u savladavanje gradiva. Java jezik zajedno sogromnim bibliotekama namijenjen je profesionalnim programerima. tovie Java biblioteke se stalno proiruju imijenjaju .

    Nauiti programirati u bilo kojem jeziku nije mogue bez praktinog rada na raunalu.

    Stoga je od vrlo velike vanosti da primjere sa satova pokuate realizirati na raunalu tijekom vjebi.

    Ako ste dosad programirali u nekom programskom jeziku mogao bi vam prvi uvodni dio biti vrlo jednostavan.

    Meutim kako lekcije budu ile broj novih sadraja i znanja e se poveavati.

    Potrudite se zadatke odraditi sami. Nemojte kopirati programski kod od kolega. Osim to varate nastavnika varate isami sebe.

  • 7/29/2019 62001558-ProgramiranjeUJavi

    5/162

    1.Uvod

    5

    2. Programi i programiranje

    U ovome poglavlje prikazat emo jednostavni Java program i nain kako ga pokrenuti na raunalu.Za poetak emo ponoviti glavne dijelove raunala i njihova svojstva:

    1. Memorija je dio raunala u koji pohranjujemo informacije. Pohranjene informacije moemo pisati,

    brisati, obnavljati,... Informacije u memoriji su niz bitova dok na vioj razini predstavljaju brojeve, tekst,slike, glazbu,...2. Ureaji za ulaz/izlaz (I/O). Informacije u raunalo unosimo bilo tipkovnicom ili preko medija (disketa,

    CD-ROM ,mrea...). Informacije iz raunala prikazujemo na ekranu ili pak aljemo na neki od medija.3. Procesor koji djeluje po instrukcijama programa. Program se sastoji od niza operacija koje procesor

    izvrava. To ukljuuje akcije poput izvravanja prorauna, itanja ili pisanja po memoriji, slanja podatakana izlazna suelja procesora, ...

    Program se pie u notaciji koja se naziva programski jezik. Svako raunalo (procesor) ima svoj programski jezikkoji nazivamo strojni jezik (machine code). Taj jezik je dizajniran s fokusom na elementarne operacije koje se

    obavljaju nad hardverom raunala. Radi se o jednostavnim operacijama poput pisanja ili itanja iz memorije,aritmetikim operacijama nad registrima procesora, itd. Iako je teoretski svaki program mogue napisati koristeistrojni jezik to je vrlo teko ak i za jednostavne programe. U praksi se gotovo sve programiranje izvodi u jezicimakoji su prilagoeni programeru. Takvi jezici se nazivajujezici visokog nivoa.

    Jezici koji se danas koriste u komercijalnoj upotrebi su C, C++,Java,C#,Perl,Phyton,Pascal(Delphi),Basic,Fortran....

    Java jezik je jedan od najmlaih jezika. Prvi put se pojavio 1995. godine. Java 2 specifikacija jezika koju koristimou ovom predmetu pojavila se 1998.

    Rekli smo da programeri piu programe uglavnom koristei programske jezike visokog nivoa, a da raunalaizvravaju instrukcije strojnog jezika. Pitanje je to raunalo radi s programom napisanim u jeziku visokog nivoa.Najei nain je koristiti raunalni program koji nazivamo prevodilac (compiler).Prevodilac prevodi programnapisan u jeziku visokog nivoa u program sastavljen od strojnog jezika. Prevedeni program onda moemopokrenuti na raunalu. (U emu se pie prevodilac ?)

    U sluaju Java jezika koriten je malo drukiji pristup u kojem se u procesu pisanja Java koda do transformacije uraunalu razumljiv kod koriste dva programa. Prvo se program koji je programer napisao u Javi, pomouprevodioca prevodi u bytecode program. Bytecode je slian strojnom jeziku, ali je neovisan o bilo kojem raunalu.Bytecode program nije vie itljiv od strane programera. Njega ita i izvrava program koji se naziva Java virtualmachine.Prednosti pristupa u dva koraka jest da se tako proizvode programi koji se ipak izvravajuzadovoljavajuom brzinom te se Java okolina moe brzo realizirati na bilo kojem raunalu.Originalni Java program koji pie programer i kojeg prevodi prevodilac naziva se izvorni kod. Bytecode kojiproizvodi prevodilac i interpretira Java virtual machine naziva se objektni kod.

    Slika 1.1 Usporedba izvravanja Java programa s tradicionalnim postupkom prevoenja

  • 7/29/2019 62001558-ProgramiranjeUJavi

    6/162

    1.Uvod

    6

    Postoje brojne razvojne okoline u kojima je mogue pisati, prevoditi i izvravati programe. Za potrebe ovogpredmeta zadrat emo se na najjednostavnijem sustavu kojije ujedno i podloga i za druge kompleksnije razvojneokoline. Sustav se naziva Software Development Kit (SDK). Moe se nai na stranicama

    java.sun.com

    Ove stranice odrava kompanija Sun Microsystems koja je odgovorna za razvoj Jave.Verzija Java okoline u trenutku pisanja ovog teksta je 1.5. U ovom predmetu koristit emo prethodnu 1.4 verziju.

    Instalacija Java okoline se u najkraim crtama obavlja na slijedei nain:

    Pokreni Java 2 SDK installer (datoteka j2sdk-1_***-win.exe), odaberi mjesto instalacije i instaliraj.

    Dodaj u PATH varijablu operativnog sustava mjesto instalacije (npr. C:\jdk1.4.2\bin). Nain dodavanja jeovisan koritenom operativnom sustavu.

    Provjeri (ukloni) CLASSPATH varijablu (-classpath command-line prekida je bolji nain).

    Detaljniji (aktualniji) opis instalacije moe se nai na stranicama java.sun.com.

    3. Primjeri jednostavnih Java programa

    U Javi program iste funkcionalnosti kao C program koji ispisuje "Hello World!" izgleda ovako:

    public class Hello

    {

    /* napii jednostavnu poruku na ekran*/public static void main(String[] args)

    { System.out.println("Hello, World!");}

    }

    Ako niste vidjeli dosada neki Java program ovaj jednostavni program izgledat e vam konfuzno. Cilj ovih poetnihsati predavanja je da vam se objasni struktura ovako jednostavnih programa.

    Svaki Java program sadri naredbe(statements). Svaka naredba opisuje neku operaciju koju raunalo treba izvriti.Operacija moe biti ispis neke informacije na ekranu, moe biti neka raunska operacija, provjera poloaja mia naekranu, itd. Raunalo jednostavno izvrava naredbu po naredbu.

    U programu koji je gore napisan nalazi se samo jedna naredba:

    System.out.println("Hello, World!");

    Kad se ta naredba izvri na ekranu e se pojaviti slijedei ispis: Hello, World!

    Java ima razliite naine pisanja poruka po ekranu bilo da piemo po prozoru, na web stranicu, itd. U ovomesluaju koristimo jednu Java metodu koja se naziva System.out.println. Rezultat izvravanja bit e ispisporuke u najjednostavnijem obliku prozora kojeg nazivamo konzola (ili DOS prozor u Windows OS). Konzola

    doputa samo jednostavan ispis teksta , redak po redak.

    Slijedi program s dvije naredbe koje su tiskane podebljano (ne koristimo podebljane fontove u Java programima).

  • 7/29/2019 62001558-ProgramiranjeUJavi

    7/162

    1.Uvod

    7

    public class Hello

    { /* napii jednostavnu poruku na ekran*/

    public static void main(String[] args)

    { System.out.println("Hello, World!");

    System.out.println("See you later.");

    }}

    Kada pokrenemo ovaj program izvrit e se obje naredbe jedna za drugom. Prvo e se na ekranu ispisati u jednojliniji Hello, World! , a nakon toga u drugoj liniji See you later. Oba programa imaju formu:

    public class Hello

    { /* komentar. */

    public static void main(String[] args)

    {

    Naredbe

    }

    }

    Ne postoji ogranienje na broj naredbi u programu. Moe ih biti na tisue. Ostatak ovog jednostavnog programamoe se promatrati kao pakiranje. Ovo pakiranje emo objasniti poslije. Sad emo se zadrati na opisu objekatakoji su neizostavni dio svakoga pa i najjednostavnijeg Java programa.

    4. Objekti i Metode

    Razmotrimo naredbu koja ispisuje poruku: System.out.println("Hello, World!"); .

    Gdje su tu objekti? Poznavalac Java jezika vidjet e dva objekta. Prvi je objekt System.Out , a drugi sami nizznakova "Hello, World!". Java cijelo vrijeme radi s objektima. U Java biblioteci definirano je mnogo vrstarazliitih objekata koje moemo koristiti u svojim programima.

    Moemo i kreirati objekte prema naim potrebama. Npr. piemo program koji e pratiti koji su studenti na FESB-uprijavljeni na koji predmet. Tada emo napisati takav program koji e pokretanjem:

    za svakog studenta kreirati jedan objekt studenta

    za svaki predmet takoer jedan objekt predmeta.

    Svaki objekt studenta sadravat e odreene podatke poput osobnih podataka studenta i liste upisanih predmeta.Objekt predmeta moe sadravati naziv predmeta i druge podatke vezane za predmet.

    U isto vrijeme kad definiramo izgled objekata trebamo i definirati koje e se operacije izvravati nad tim objektima.to se tie objekta student , bit e nam potrebne operacije kreiranja objekta studenta, auriranja liste predmeta kojeje student upisao, operacije ispisa podataka o studentu na ekran, itd. Te operacije koje se izvravaju nad objektomnazivaju se metode.

    Dosad smo ve vidjeli primjer metode. Njen puni naziv je: System.out.println

    Ovaj naziv oznaava metodu println koja pripada objektu System.out. System.outje objekt iji je

    zadatak da primi poruku koju treba prikazati na ekranu.Zamislimo ga kao osobu kojoj dajemo to treba ispisati na ploi.

  • 7/29/2019 62001558-ProgramiranjeUJavi

    8/162

    1.Uvod

    8

    Printlnmetoda je operacija koja se izvrava nad porukom. tako nam izraz:

    System.out.println("Hello, World!");

    kae:

    koristi println metoda za slanje poruke"Hello, World!

    "objektu System.out, koji e je prikazati na

    ekranu.

    Svaki objekt pripada klasi (class) koja specificira od kojih podataka se objekt sastoji i koje metode posjeduje. Npr.

    svi nizovi znakova pripadaju klasi koja se naziva String. Klase String i System.Out definirane su u klasama koje

    pripadaju Java bibliotekama. Moemo kreirati i svoje klase npr. klasu Student i klasu Predmet.

    Koji je odnos klasa-objekt ? Kaemo da je objekt instanca od klase. Jednostavno, klasa je opis objekta napisan ukodu. Moemo je promatrati kao kalup ili skicu prema kojoj se u tijeku izvravanja programa kreiraju objekti.Program moe kreirati vie objekata ,instanci iste klase. Java biblioteka je u potpunosti sastavljana od definicijaklasa. Ako napiemo bilo koji program u Javi i on e se sastojati od klasa. Veina klasa definira tipove objekata.Postoje samo nekoliko klasa kojima se ne definira objekt ve su sastavljene samo od samostalnih metoda.

    Ipak nije sve u Javi objekt. Najjednostavniji tipovi podataka poput cjelobrojnih i brojeva u pokretnom zarezutretiraju se neto drugaije. takvi podaci nazivaju se primitivni tipovi podataka.

    5. Kako je konstruiran program iz primjera

    Prethodni dio pokazao nam je da se Java programi sastoje od klasa. Programi koji su navedeni kao primjer uklapaju

    se u tu tvrdnju, ali ipak na vrlo primitivan nain. Oba programa sastoje se od jedne klase (Hello) koja se sastojisamo od jedne statike metode tj. metode koja ne pripada nijednom odreenom objektu.

    Svaki metoda bilo da pripada objektu ili ne, sadri odreeni broj naredbi koje izvravaju neku korisnu operaciju. (Udrugim raunalnim jezicima imamo funkcije ili procedure)

    Analizirat emo korak po korak kompletnu metodu iz zadnjeg primjera:

    /* napii jednostavnu poruku na ekran*/public static void main(String[] args)

    { System.out.println("Hello, World! ");System.out.println("See you later. ");

    }

    Sastoji se od slijedeih dijelova:

    1. /* napii jednostavnu poruku na ekran*/

    Ovo je komentar koji opisuje to ni program trebao raditi. to je jednostavno poruka za onoga tko ita izvorni kodprograma. Svaki tekst izmeu /* i */ bit e tretiran kao komentar i Java e ga u potpunosti ignorirati.

    2. public static void main(String[] args)

    Ovo predstavlja zaglavlje (heading) metode. Svaka metoda ima svoj naziv. U ovom sluaju naziv metodeje rijemain koja se nalazi neposredno ispred zagrada. Rijei public, static i void pokazuju Java prevodiocunain koritenja metode main. (Bit e objanjeno kasnije).

    Dio u zagradama, String[] args, opisuje informaciju koja e biti proslijeena metodu svaki put kad budepozvan. Naziva se lista parametara. U navedenom primjeru ta je informacija ignorirana, odnosno nije koritena uprogramu. (koko se koristi bit e objanjeno poslije)

  • 7/29/2019 62001558-ProgramiranjeUJavi

    9/162

    1.Uvod

    9

    3. { System.out.println("Hello, World! ");System.out.println("See you later. ");

    }

    Ovo je tijelo(body) metoda. Uvijek se sastoji od niza naredbi zatvorenih u vitiaste zagrade, {..}. Pozivom ovogmetoda izvrava se svaka od naredbi.

    Sve metode sastoje se od tri navedena dijela. Strogo reeno komentar je opcionalan. Meutim preporua se uvijekpoeti s komentarom koji ukratko kae to radi metoda koji slijedi. Taj dio nazivamo specifikacijom. Gornjiprimjer je prejednostavan da bi specifikacija bila od vee koristi, ali u veim programima to je najefikasniji nainda pomognemo razumijevanju programa. Posebno je to bitno ako na programu radi vie programera.

    Svaki program sastoji se od odreenog broja definicija klasa. U dva gornja primjera u programu je definirana samojedna jedina klasa nazvana Hello.

    Definicija klase zapoinje s zaglavljem: public class Hello

    Zaglavlje je praeno elementima koji sainjavaju klasu, zatvorenim u vitiaste zagrade.U naim primjerima klasa se sastoji od samo jednog lana, metode nazvane main, koju svo ve opisali. Openitoprogram se sastoji od jedne ili vie definicija klasa od kojih svaka sadrava jednu ili vie metoda.

    Java programeri koriste konvenciju po kojoj naziv klase zapoinje velikim slovom, a naziv metode malim slovom.U ovome predmetu emo se nastojati strogo pridravati navedene konvencije. Openito bilo koji naziv u Javi(identifikator) sastoji se od slova, znamenki i mora poeti sa slovom. Za potrebe ove definicije se simboli valutapoput i $, i povlaka (_) raunaju kao slova. Duljina naziva nije ograniena.

    Na slijedeoj slici prikazan je na program koji se sastoji od dvije naredbe razdvojen okvirima koji nam pokazujuto je klasa, to je metoda a to su naredbe.

    klasa Hello

    metoda main

    public class Hello

    {

    public static void main(String[] args)

    {

    System.out.println( Hello, World! );

    System.out.println( See you later. );

    }

    }

    naredbe(izrazi)

    6. Metoda System.out.println

    System.out.printlnje prva metoda iz Java biblioteke koji smo upotrijebili. Ova metoda e ispisati niz

    znakova na konzolu (DOS prozor). Naziv printlnje skraenica za print line.

  • 7/29/2019 62001558-ProgramiranjeUJavi

    10/162

    1.Uvod

    10

    Mjesto na ekranu na kojemu e se ispisati slijedei znak oznaeno je na ekranu s malom treptajuom linijomnazvanom kursor. System.out.println metoda ima tu osobinu da ispisom teksta pomie kursor na poetakslijedee linije. Ako elimo da kursor ostane na prethodnoj liniji koristit emo metodu System.out.print.

    Drugi nain odreivanja kad elimo ispis u novoj liniji je koritenje para znakova \n u nizu znakova svaki put kadje potrebno da ispis krene u novu liniju. Npr. :

    System.out.print("Hello, World!\nSee you later\n")

    e ispisati Hello, World!, nakon toga pomaknuti kursor u novu liniju gdje e ispisati See you later. , inakon toga pomaknuti kursor na novu liniju. Ta e naredba imati isti rezultat kao i par naredbi:

    System.out.println("Hello, World! ");System.out.println("See you later. ")

    7. Kako prevesti i pokrenuti Java program

    Pretpostavimo da elite izvriti program iz prvog primjera:

    class Hello{ /* napii jednostavnu poruku na ekran*/

    public static void main(String[] args){ System.out.println(Hello, World!);}

    }

    Prvo morate biti pristupiti raunalo na koje je instalirana podrka za Javu odnosno Java SDK.

    A. Ukucajte program i pohranite ga u datotekuHello.java.

    Moete koristiti bilo koji tekst editor za unos koda, npr. Notepad. Korisno je imati i neki sofisticiraniji Javaeditor npr. JedPlus. Takvi editori nam mogu omoguiti korisne funkcije poput sintaksnog naglaavanja iliautomatskog uvlaenja teksta. Mogue je iz takvih editora pozvati i operacije prevoenja i izvravanja.

    Ako se va program sastoji od samo jedne klase potrebno ga je pohraniti u datoteku koja ima isti naziv kao iklasa uz dodanu ekstenziju .java. kako se na jednostavni program sastoji od samo jedne klase nazvaneHello, datoteku moramo nazvati Hello.java.

    B. Otvori DOS prozor i postavi trenutni direktorij na direktorij gdje je datoteka s programom.

    Sve naredbe koje slijede tipkaju se u ovaj prozor. Poruke prevodioca i sve to e program ispisati odvija setakoer u ovome prozoru. Postoje i drugi naini koje emo obraditi na vjebama, ali ovo je openiti nain

    koji radi na svim raunalima.

    U ovome trenutku bit e otvorena dva prozora. Jedan s editorom (npr. Notepad), a drugi s DOS prozoromkoji slui za interakciju s Java sustavom. U tom DOS prozoru prevodimo i izvravamo program.

    C. Koritenje JDK za prevoenje programa u Hello.java datoteci.

    Za prevoenje programa treba utipkati:

    javac Hello.java

    Ako dobijete poruku da sustav ne moe nai javac (Java prevodilac) znai da ili nije pravilno postavljenaPATH varijabla sustava ili nije instaliran JDK.

  • 7/29/2019 62001558-ProgramiranjeUJavi

    11/162

    1.Uvod

    11

    Ako nema greaka u programu prevodilac e proizvesti bytecode verziju vaeg programa u datoteci nazvanojHello.class.

    Ako prevodilac nae greke poput tipkanja Class umjesto class ili izostavljanja znaka ; na kraju naredbe,odbit e prevoenje i izvijestiti o pronaenim grekama.To nazivamo grekom prevoenja (compiler error).Najee je poruka o greci takva da je jednostavno

    nai mjesto u kodu gdje smo uinili pogreku. Ponekad iz poruke nije jasno odakle potjee greka i tada jepotrebno paljivo pregledati kod. Poetnici esto pogrijee traei greku ba u liniji gdje je to prevodilacjavio. Meutim , greka se moe nalaziti i negdje prije !

    Ako postoje greke kod prevoenja potrebno ih je otkloniti u editoru. nakon otklanjanja greaka nezaboravite snimiti datoteku.

    A Koritenje JDK za pokretanje prevedene verzije programa koja se nalazi uHello.class

    datoteci.

    Nakon to je prevodilac proizveo bytecode verziju programaHello.class, moete ga pokrenuti u JavaVirtual machine tipkanjem:

    java Hello

    Ne tipkajte .class ekstenziju. JDK pretpostavlja da ste mislili na Hello.class.

    Ovaj se program nakon toga treba izvriti i ispisati poruku u DOS prozoru. Ako elite modificirati ispisprograma ili dodati jo koju naredbu opet se trebate vratiti u prozor tekst editora, napraviti modifikacije inakon toga u DOS prozoru ponoviti postupak prevoenja i izvravanja.

    U tijeku izvoenja programa moe nastati greka. Takva greka naziva se run-time greka (run-time

    error) ili greka u izvravanju (execution error).

    U nekim sluajevima JVM nee moi izvriti program do kraja. Tada e ispisati poruku o greci s podatkomgdje je program doao u izvoenju prije nego to je prekinut.

    Proces pisanja, prevoenja i izvoenja programa pokazan je i na slijedeim slikama:

    Slika 1.2 Pisanje programa, prevoenje, izvravanje.

  • 7/29/2019 62001558-ProgramiranjeUJavi

    12/162

    1.Uvod

    12

    8. Pisanje koda Java programa

    Prvo pravilo pisanja bilo kojeg programa je: piite paljivije to god moete. Skoro svaka pogreka u pisanju enajvjerojatnije proizvesti greku prilikom prevoenja ili prilikom izvoenja. Prvo e je trebati detektirati, a nakon

    toga korigirati. Npr. svaki izraz koji koristi naredbu System.out.printlnmora zavriti s ; . Ako izostavite ;dobit ete poruku o greci u fazi prevoenja.

    U pisanju Java programa morate paziti na koritenje malih i velikih slova. Za razliku od nekih drugih programskihjezika Java razlikuje velika i mala slova (case sensitive). To znai da ne moete utipkati Class ili CLASS napoetku programa. Potrebno je tono pisaticlass.

    Rije classima u Java programima specijalno znaenje i jedna je od kljunih rijei (keywords) Java jezika. javaima 47 kljunih rijei i sve se piu malim slovima. kao to je prije napisano drat emo se konvencije po kojoj senazivi klasa piu s poetnim velikim slovom, a nazivi metoda malim slovima.

    Ako imamo nazive koji se sastoje od vie spojenih rijei moemo poetak slijedee rijei pisati velikim slovom.

    Npr. klasu moemo nazvati HelloWorld, a metodu npr. ispisTeksta.

    Koliko greaka pisanja moete vidjeti u ovome kodu ? prevodilac e javiti svaku od njih.

    public Class Hello

    { /* Write a simple message on the screen.

    public static viod main(string[] args)

    { System.out,println('Hello, World!");System.out.printline("See you latef.");

    }

    )

    Jedina greka koju prevodilac nee javiti je pogreno pisanje unutar niza znakova See you latef. Ta greka ebiti oigledna tek nakon izvravanja programa.

    Zbog svega navedenog nije se praktino oslanjati na prevodilac u otkrivanju greaka. To je prije svega dugotrajanproces jer je potrebno svaki put nakon ispravljene greke proi kroz faze prevoenja i izvravanja. Meutim to vievrijedi za iskusne programere nego za poetnike kojima e prevodilac esto biti neprocjenjiva pomo u otklanjanjupogreaka.

    Osim to je Java prevodilac razlikovanjem velikih i malih slova zna biti dosta nezgodan u drugim pogledima je vrloliberalan. Uope mu nije bitan prostorni raspored vaeg koda tj. upotreba praznina i novih redova.

    Slijedei primjer bi se trebao prevesti bez greke iako je vrlo teko itljiv:

    public class Hello{public static void main(String[]

    args){System.out.println("Hello, World!");System.out.println("See you later.");}}

  • 7/29/2019 62001558-ProgramiranjeUJavi

    13/162

    1.Uvod

    13

    Iz ovoga je na prvi pogled teko ustanoviti da se program sastoji od jednog metoda koji sadri dvije naredbe. ake se i slijedei primjer pravilno prevesti:

    public class

    Hello

    public

    static

    void main

    (String[] args)

    { System. out. println

    ( "Hello, World!" );System.out.

    println( "See you later." );} }

    Sve dok ne spojite neke rijei poput classHello, ili ne razdvojite cla ss, prevodilac se nee buniti..

    Prevodilac prema svemu navedenom je vrlo fleksibilan u koritenju razmaka i novih redova. Meutim bilo tko bude

    itao va program (i vi sami) poeljet e mnogo uredniji i jasniji kod. Zato je praznine uputno koristiti da bi sedobio jasniji kod.Ako pogledate na originalni kod gore modificiranih programa, vidjet ete da postoje neka pravila u pisanju. Npr.metoda main je pomaknuta tri mjesta unutar u odnosu na prethodni redak. To nazivamo uvlaenje koda

    (indentation). Ako ima vie metoda unutar klase, stavljamo razmak izmeu svake. Primijetite i da vitiaste zagradeimaju konvenciju o smjetaju. Vidjet emo tijekom ovoga predmeta kako postupati s pojedinim elementima koda.Osim urednosti koja omoguava razumijevanje koda, drugi rezultat je pisanje koda s manje greaka.

    9. Kako rjeavati zadatke

    Zadaci koji su navedeni na kraju svakog poglavlja predstavljaju zadatke koji e se javiti i na ispitu. Stoga nastojtezadatke samostalno rjeavati jer je to najefikasniji nain za usvajanje gradiva.Podloga za rjeavanje zadataka jeste

    sadraj svakog poglavlja. tovie, tu ete nai i dijelove izvornog koda koji e vam koristiti u rjeavnju zadataka.

    Na raunalu na kojemu dobijete korisniki raun kreirajte direktorij JProg. Unutar tog direktorija za svakopoglavlja otvorite direktorij Pn gdje je n broj poglavlja. Dakle za prvo poglavlje otvorite direktorij P1. Kadazavrite poglavlje 1 unutar direktorija P1 trebali biste imati slijedee datoteke:

    Hello.java , Hello.classImeUOkviru.java, ImeUOkviru.classGresnik.class , Gresnik.javaInicijali.class , Inicijali.java

    10. Zadaci za prvo poglavlje

    Za ovo poglavlja zadana su tri jednostavna problema tj. pisanje tri jednostavna programa..

    1. Ukucaj, prevedi i pokreni slijedei Hello program koji ispisuje dvije linije na ekran:

    /* Autor: Ime Prezime */

    class Hello

    {

    /* jednostavan ispis na ekran. */

    public static void main(String[] args){ System.out.println("Ciao, Svite!");

    System.out.println("Vidimo se kasnije !");}

    }

  • 7/29/2019 62001558-ProgramiranjeUJavi

    14/162

    1.Uvod

    14

    2. Napiite program s nazivom klase ImeUOkviru. Program treba ispisati vae ime u okviru poput slijedeega:+--------+

    | Ivan |

    +--------+

    Uputa: nije svejedno kako ete nazvati datoteku s kodom!

    3.Ukucaj i pokreni slijedei program te analiziraj pogreke koje e javiti prevodilac. ukucajte ga sa svimpogrekama !

    public Class Gresnik {/* Write a simple message on the screen.public static viod main(string[] args){ System.out,println('Alo, Svijete!");

    System.out.printline("Vikimo se kasnije.");}

    }Zatim ispravite pogreaka koliko moete i pokuajte natjerati program da radi kako bi trebao.

  • 7/29/2019 62001558-ProgramiranjeUJavi

    15/162

    2.Brojevi i znakovni nizovi

    15

    2. Brojevi i znakovni nizovi (strings)

    U prvom poglavlju pisali smo programe koji su samo ispisivali poruke na ekran. U ovome poglavlju uvodimo nove

    izraze koje emo koristiti u metodama. To ukljuuje upotrebu dvije vrste vrijednosti: brojevi i znakovni nizovi(strings).

    SADRAJ

    1. Cjelobrojne vrijednosti (integers).

    2. Varijable (variables).3. Dodjeljivanje(assignments).

    4. Brojevi u pokretnom zarezu (floating-point values).

    5. itanje ulaza koritenjem ConsoleReader objekta.6. Znakovni nizovi (strings).8. Zadaci za 2. poglavlje.

    Java posjeduje slijedee tipove primitivnih tipova podataka:

    kljuna rije opis veliinacjelobrojni (integers)

    byte cijeli broj duljine jednog byte-a 8 bit-a s predznakom

    short cijeli broj duljine dva byte-a 16 bit-a s predznakom

    int Integer 32 bit-a s predznakom

    long Long Integer 64 bit-a s predznakom

    brojevi u pokretnom zarezu (real numbers)

    float ednostruka preciznost 32-bita

    double dvostruka preciznost 64-bita

    ostali tipovi

    char edan znak 16-bita unicode znak

    Bolean boolean(logika vrijednost) true ili false

    1. Cjelobrojne vrijednost (integers)

    U prvom poglavlju smo spomenuli da nisu svi podaci u Javi objekti. Najjednostavniji tipovi podataka, poput cijelih

    brojeva ili brojeva u pokretnom zarezu odstupaju od logike da sve treba biti objekt. Takvi tipovi podataka nazivajuseprimitivni tipovi podataka.

    Ovo poglavlje poinjemo primjerom upotrebe cijelih brojeva (integers).

    Pretpostavimo da idete kupovati na trnici. Kupili ste 2 kg jabuka po 12 kuna, 3kg krumpira po 2kune i 50lipa i 2

    kg bresaka po 14 kuna. Koliko ste kuna potroili.

    Nije potrebna snaga Jave na modernom raunalu za izraunati navedeni primjer jer i napamet (ili bar uz pomopapira i olovke) da se izraunati je ukupan raun 85.5 kune.

    Meutim program e rasvijetliti nekoliko toaka u raunanju s cijelim brojevima.

  • 7/29/2019 62001558-ProgramiranjeUJavi

    16/162

    2.Brojevi i znakovni nizovi

    16

    PRIMJER 1

    public class Racun1

    { /* Izracunaj ukupni racun za 2 kg jabuka po 12 kn

    3kg krumpira po 2kn i 50lipa i 2 kg bresaka po 14 kn */

    public static void main(String[] args){ System.out.print("Racun je: ");

    System.out.print(2*1200 + 3*250 + 2*1400);System.out.println(" lipa.");

    }

    }

    Poput svih primjera za ovo poglavlje program se sastoji od jedne klase koja sadri samo jednu metodu main. Uovome primjeru metoda sadri tri naredbe. Kad se izvri tri metode e proizvesti dijelove linije na ekranu kako je toprikazano na slici ispod.

    Primijetite da prve naredbe koriste print umjesto printlnto znai da ne pomiu kursor u novi red nakonispisa.

    Racun je: 59500 lipa.

    naredba 1 naredba 2 naredba 3

    Racun je: 59500 lipa.

    Kada Java izvri naredbu 2 , izraunat e vrijednost slijedeeg aritmetikog izraza:

    2*1200 + 3-250 + 2*1400

    i prikazati rezultat 59500. Primijetite da moemo ispisivati brojeve koristeiSystem.out.print na isti nain na koji smo koristili kod ispisivanja znakovnih nizova.

    U Java programu slijedei operatori mogu se koristiti u aritmetikim izrazima:

    + zbrajanje (addition)

    - oduzimanje (subtraction) (koristi se i za minus predznak)

    * mnoenje (multiplication)/ dijeljenje (division)

    % ostatak (remainder)

    U Javi (i veini drugih programskih jezika vieg nivoa) brojevi su cjelobrojni ili brojevi u pokretnom zarezu(integers or floating-point numbers). Ove dvije vrste vrijednosti pohranjuju se u memoriji na razliite naine. Akovrijednost napiemo bez decimalne toke , npr. 4 ona e biti tretirana kao cjelobrojna vrijednost. Ako je napiemo sdecimalnom tokom npr. 4.0 bit e tretirana kao broj u pokretnom zarezu. Uvijek trebamo koristiti cijele brojevekad to moemo. Raunanja s njima su bra, koriste manje memorije i nisu podloni grekama zaokruivanja poputbrojeva s pokretnim zarezom.

    Operator dijeljenja , / , u stvari ima dva znaenja. Ako ga koristimo s cijelim brojevima tada znai cjelobrojnodijeljenje . Npr. 11 / 4 = 2, (-11) / 4 = -2. Ako se koristi s dva broja s pokretnim zarezom onda znai normalnodijeljenje.

    Npr. 10.5 / 2 = 5.25. Operator ostatka koristi se samo s cijelim brojevima. Npr. 11%4 = 3 and (-11)%4 = -3.

    Ako Javi damo da izrauna izraz m%n gdje je n jednak nuli , Java e prijaviti run-time greku.

  • 7/29/2019 62001558-ProgramiranjeUJavi

    17/162

    2.Brojevi i znakovni nizovi

    17

    Kada procesira sloenije izraze Java se dri standardnog prioriteta operatora pa npr. izraz 3+4*5 znai isto kao i3+(4*5).

    Kada se izraunava izraz sa vie operatora istog prioriteta u nizu, izraz se rauna s lijeva nadesno.Npr. 3/4/5 znai isto kao i (3/4)/5, na kao 3/(4/5) to bi proizvelo greku (Zato?).

    2. Varijable

    Slijedei primjer je druga verzija programa prvog primjera. Ovaj primjerkoristi varijable tj. naziv koji znaivrijednost.

    Program izraunava ukupan raun u dva odvojena koraka.PRIMJER 2

    public class Racun2

    { /* Izracunaj ukupni racun za 2 kg jabuka po 12 kn

    3kg krumpira po 2kn i 50lipa i 2 kg bresaka po 14 kn */

    public static void main(String[] args){ int total =2*1200 + 3*250 + 2*1400;

    System.out.print("Racun je: ");

    System.out.print(total/100);

    System.out.print(" kn i ");

    System.out.print(total%100);

    System.out.println(" lipa.");

    }

    }

    Izraz: int total =2*1200 + 3*250 + 2*1400;

    kae: kreiraj varijablu total koja e sadravati vrijednost izraza 2*1200 + 3*250 + 2*1400 (=59500).Rije intna poetku pokazuje da je tip vrijednosti koju varijabla totalmoe pohraniti je cjelobrojna vrijednost.

    Ovaj izraz se naziva deklaracija varijable (ili definicija varijable).

    Izraz: System.out.print(total/100);

    kae: ispii vrijednost naznaenu kao total/100. Radi se o cjelobrojnom dijeljenju ija je vrijednost 85 i ta evrijednost biti ispisana.

    Izraz: System.out.print(total%100);

    kae: ispii ostatak dijeljenja totalsa 100. U ovome sluaju je to 50.

    Ukupan ispis na ekran bi trebao biti:

    Racun je: 59 kn i 50 lipa.

    Ovaj primjer smo mogli realizirati i bez varijable s upotrebom slijedee dvije naredbe:

    System.out.print((2*1200 + 3*250 + 2*1400)/100);System.out.print((2*1200 + 3*250 + 2*1400)%100);

    Upotrebom varijable izbjegli smo dvostruko raunanje ukupnog broja lipa. U ovako malom promjeru to je malauteda, ali u realnim primjerima mogu se postii znaajne utede.

  • 7/29/2019 62001558-ProgramiranjeUJavi

    18/162

    2.Brojevi i znakovni nizovi

    18

    Drugi razlog upotrebe varijabli je da se jasno oznae vrijednosti koje se koriste u raunu tako da je jasnije to se uprogramu radi. Za nazive varijabli moete koristiti bilo koji naziv koji ve nije upotrebljen za neto drugo. U praksiupotrebljavaju se opisni nazivi koji odgovaraju ulozi varijable.

    U slijedeoj verziji programa broju kilograma pojedinog artikla dani su oiti nazivi jabuka, krumpir,breskva. Usput , prihvaena je konvencija da nazivi varijabli uvijek poinju s malim slovom.

    PRIMJER 3

    public class Racun3

    { /* Izracunaj ukupni racun za 2 kg jabuka po 12 kn

    3kg krumpira po 2kn i 50lipa i 2 kg bresaka po 14 kn */

    public static void main(String[] args)

    { int jabuka = 2;

    int krumpir = 3;

    int breskva = 2;

    int total =

    jabuka*1200 + krumpir*250 +breskva*1400;

    System.out.print("Racun je: ");

    System.out.print(total/100);

    System.out.print(" kn i ");

    System.out.print(total%100);

    System.out.println(" lipa.");

    }

    }

    Ovaj program daje izlaz isto kao i prethodni. Upotreba varijabli omoguava bolje razumijevanje koda bilo vama ilinekome drugome koji e nakon vas modificirati kod.U programiranju postoji pojam "magini broj". To su razne konstante u programu za koje prije ili kasnije sezaboravi to znae.

    Kada je varijabla kreirana za nju se alocira prostor u memoriji gdje se potom moe spremiti vrijednost varijable.Koliina memorije koja se alocira ovisi o tipu varijable. Npr. za tip varijable int, kao to je to u sluaju varijabletotal, bit e alocirana 32 bita memorije.

    Format pohrane je rijetko vaan programeru. Bitniji je opseg vrijednosti koji se moe pohraniti u zadanu varijable.Vrijednost intvarijable moe biti u podruju od -2147483648 do 2147483647. Ako su potreban vei opseg

    vrijednosti potrebno je umjesto int upotrijebiti long tip varijable. Taj tip zauzima 64 bita, a opseg je od -9223372036854775808 do 9223372036854775807. Postoje i krai tipovi cjelobrojnih varijabli short (16 bita) ibyte (8 bita).

    3. Dodjeljivanje (Assignments)

    Kao to smo vidjeli, svaka varijable ima naziv i odgovarajui dio memorije. Vrijednost koja je sadrana u memorijije dodijeljena varijabli. Ta vrijednost ne mora biti ista u tijeku izvravanja programa. Moe biti zamijenjenadrugom vrijednou u tijeku izvravanja programa. U slijedeem primjeru promijenit emo sadraj varijable.

  • 7/29/2019 62001558-ProgramiranjeUJavi

    19/162

    2.Brojevi i znakovni nizovi

    19

    PRIMJER 4

    public class Mjenjacnica1

    { /* Preracunaj eure u kune */

    public static void main(String[] args)

    { int eura = 110;

    int centa = 55;

    centa = 100*eura + centa;

    double kuna = centa * 0.0751;

    System.out.print("Kuna: ");

    System.out.print(kuna);

    }

    }

    Program zapoinje kreiranjem dviju varijabli nazvanih maraka i pfeniga koje su postavljene na odreene

    iznose.Nakon toga se izvrava slijedei izraz:

    centa = 100*eura + centa;

    Izraz znai: izraunaj vrijednost izraza 100*eura + centa, i pohraniti rezultat (11055) u varijablu centa. Drugimrijeima, ovaj izraz e zamijeniti originalnu vrijednost pohranjenu u varijabli centa (=55 ) s ukupnim iznosom kojiimamo izraenim u centima. Nova vrijednost se koristi u slijedeem izrazu:

    double kuna = centa * 0.0751;

    i predstavlja nae prvo koritenje brojeva u pokretnom zarezu. Izraz znai: kreiraj varijablu nazvanu eura , tipadouble, i dodijeli joj vrijednost centa *0.0751. Varijabla tipa doublesadrava broj u pokretnom zarezuduple preciznosti i alocira 64 bita memorije.

    Produkt e se izraunati u aritmetici pokretnog zareza i rezultat e biti 830.2305

    Konaan ispis je:

    Kuna: 830.2305

    Izraz:pfeniga = 100*maraka + pfeniga;

    nazivamo dodjeljivanje vrijednosti .Ovaj izraz mijenja vrijednostpostojee varijable.

    Kadgod Java obavlja dodjeljivanje ono se obavlja u dva koraka:

    (1) Prvo se rauna vrijednost s desne strane od znaka =.(2) Zatim se ta vrijednost sprema u varijablu naznaenu s lijeve strana izraza

    Mogue je mijenjati vrijednost spremljenu u varijablu, ali nije mogue mijenjati tip (type) varijable.

    Mogue je deklarirati varijablu bez specificiranja njene inicijalne vrijednosti. Ako Java izvri slijedei izraz:

    int total;

    kreirat e varijablu tipa int i dati joj naziv total, ali nee spremiti nikakvu vrijednost u istu. Vrijednostvarijabli e biti potrebno dodijeliti kasnije u programu. U meuvremenu nije mogue znati to sadri varijabla

  • 7/29/2019 62001558-ProgramiranjeUJavi

    20/162

    2.Brojevi i znakovni nizovi

    20

    total. U njoj e biti neki bitovi koji su ostali u memoriji otprije. Kaemo da vrijednost varijable nijedefinirana.

    Opi oblik deklaracije varijable je dakle:

    deklaracija (s inicijalnom vrijednosti)

    TIP NAZIV = IZRAZ;

    Npr. TIP moe biti double,NAZIVmoe biti eura, a IZRAZmoe biti 64.45.

    dakle

    double eura = 64.45;

    deklaracija (bez inicijalne vrijednosti)

    TIPNAZIV;

    dodjeljivanje

    NAZIV = IZRAZ;

    Java omoguava deklaracije varijabli u kojima se istovremeno deklarira vie varijabli odjednom.

    Primjer: kreiranje varijabli w, x, y i z, i dodjeljivanje inicijalnih vrijednosti varijablama x i z.

    int w, x = 1, y, z = 2;

    esto je nekoj varijabli potrebno samo nadodati neku vrijednost i postoji skraeno pisanje za takav tip operacije.Npr. za dodati 3*jabuka varijabli total pisat emo slijedei izraz:

    total += 3*jabuka;

    Slino moemo koristiti simbol -= kada elimo oduzeti vrijednost od varijable , *=kada elimo pomnoitivarijablu s izrazom , itd.

    Openito izraz:

    x OP= y; ekvivalentan je izrazu

    x = x OP y;gdje je OP bilo koji binarni operator

    Jedan od najeih sluajeva promjene vrijednosti varijable je poveavanje za jedan.Moemo pisati:

    x = x+1; ili krae x += 1; ili jo krae x++;

    Slino za oduzimanje 1od x, piemo x--.

  • 7/29/2019 62001558-ProgramiranjeUJavi

    21/162

    2.Brojevi i znakovni nizovi

    21

    4. Brojevi s pokretnom zarezom (Floating-point)

    Naziv 'broj s pokretnim zarezom' proizlazi iz naina pohrane takvih brojeva u memoriji.

    U Javi tip double se najee koristi za brojeve u pokretnom zarezu. Vrijednost tipa double zauzima 64 bita.to omoguava veoma velik opseg vrijednosti, priblino 1.8E308, to izraeno preko preciznosti iznosi 15znaajnih znamenki. Naziv double je skraenica za double precision floating-point. Java posjeduje i drugi tip

    za rad s brojevima s pokretnim zarezom koji se naziva float. Taj tip podataka zauzima samo 32 bita tako dapredstavlja ekonominije koritenje memorije, ali ima samo pola preciznosti tipa double te ekvivalentno manjiopseg od oko 3.4E38.

    Broj s pokretnim zarezom moe se pisati s decimalnom tokom, npr. 14.56 ili 14.0. Moe biti pisan i seksponentom, npr. 14.56E-12.

    Java sadrava niz metoda koje raunaju irok opseg matematikih funkcija koje koriste double vrijednosti. Svesu statike metode (ne pripadaju nijednom objektu) iz klase Math koja se nalazi u Java biblioteci. Kadgodkoristite statiku metodu koja pripada klasi biblioteke potrebno je kao prefiks naziva metode staviti i naziv klase.

    Math.sin(x) sinus od xMath.cos(x) cosinus od x

    Math.tan(x) tanges od x

    Math.exp(x) ex

    Math.log(x) prirodni logaritam od x

    Math.abs(x) apsolutna vrijednost od x

    Math.floor(x)najvei cijeli broj xMath.ceil(x) najmanji cijeli broj x

    U svakoj od metoda parametar x je tipa double , a rezultat je tipa double.

    Java se nee buniti ako nae vrijednost tipa int na mjestu gdje je predvien tip double.Kadgod se to dogodi Java e konvertirati cijeli broj u odgovarajui broj s pokretnim zarezom

    Razmotrite slijedee izraze:

    int m = 3;

    int n = 4;

    double x = m*n;

    Kada Java bude izvravala trei izraz. izraunat e m*n koristei cjelobrojnu aritmetiku te rezultat privremenospremiti kao 32-bitnu vrijednost odnosno cijeli broj 6. Zatim e tu vrijednost konvertirati u 64-bitni broj upokretnom zarezu (6) te ga spremiti u varijablu x.

    to e biti rezultat izvravanja slijedeeg izraza:

    double x = m/n;

    Odgovor je da e x biti postavljen na vrijednost 0. Razlog tome je da e za izraunavanje izraza m/n bitiupotrijebljena cjelobrojna aritmetika, jer su oba operanda cjelobrojna

    Pretpostavimo da ipak elimo koristiti normalno dijeljenje brojeva s pokretnim zarezom. Potrebno je Javu uvjeritida vrijednosti m i n tretira kao brojeve s pokretnim zarezom. Moemo to uiniti na slijedei nain:

    double x = ((double) m) / n;

  • 7/29/2019 62001558-ProgramiranjeUJavi

    22/162

    2.Brojevi i znakovni nizovi

    22

    Izraz (double) naziva se cast operator. Stavljanjem cast operatora ispred m kaemo Javi da konvertiravrijednost od m u ekvivalentnu double vrijednost. Kad smo to uinili operator se sada odnosi na jednu doublevrijednost i jednu int vrijednost. U tom sluaju Java e koristiti dijeljenje za brojeve s pokretnim zarezom.

    Kada elimo konvertirati broj u pokretnom zarezu u cijeli broj postoje dva naina.Prvi je nain da od broja s pokretnim zarezom uzmemo cijeli dio, dakle dio koji ostane kad oduzmemo decimalni

    dio.

    Npr., broj u pokretnom zarezu 4.7 tada postaje cijeli broj 4. Nain kako to postiemo je upotreba int castoperatora:

    double x = 4.7;

    int i = (int) x;

    Drugi izraz e konvertirati vrijednost od x u cijeli broj 4 i nakon toga pohraniti ga u varijablu i. Da je x biopostavljen na -4.7, i bi primio vrijednost -4.

    Drugi nain konvertiranja brojeva u pokretnom zarezu u cijele brojeve je zaokruivanje na najblii cijeli broj. Npr.

    najblii cijeli broj za 4.7 je 5.Npr. slijedei izraz obavit e zaokruivanje pozitivnog broja x i pohraniti zaokruenu vrijednost u varijablu i :

    int i = (int) (x + 0.5);

    Npr., ako je x jednak 4.7, vrijednost od x + 0.5bit e 5.2, a vrijednost od (int)(x + 0.5)bit e 5.

    (Upozorenje. Ne pii: int i = (int)x + 0.5; )

    Kako bi bilo izvedeno zaokruivanje za negativne brojeve ?

    U zaokruivanju broja u pokretnom zarezu(i pozitivnih i negativnih) na najblii cijeli broj moete koristiti i metoduiz Math klase:

    Math.round(x)

    To je zgodno rjeenje osim to Math.round(x)kao rezultat vraa vrijednost tipa long.Sve to je potrebno da bi se rezultat dodijelio varijabli tipa int je primjena (int) cast operatora :

    int i = (int) (Math.round(x));

    5. itanje ulaza koritenjem ConsoleReader objekta

    Primjeri koji su dosada obraivani koriste za svoj raun vrijednosti koje je programer upisao u sam kod programa.Ako u njima elimo neke druge vrijednosti moramo ih mijenjati u kodu programa.

    Ljepa alternativa je da ponovo napiemo programe tako da njihove ulazne vrijednosti unosimo koristeitipkovnicu tijekom izvravanja programa. Npr. program koji konvertira valute mogao bi prvo ispisati poruku dakorisnik upie iznos u markama, zatim proita ono to mu se upie i na kraju ispie rezultat.

    U ovom dijelu napisati emo takav program.

    Dosada smo u primjerima prikazivali informacije na ekranu koristei println i print metode koje pripadajuobjektu System.out.

  • 7/29/2019 62001558-ProgramiranjeUJavi

    23/162

    2.Brojevi i znakovni nizovi

    23

    Objekt System.out ima pristup ekranu i moe proslijediti na njega bilo koje brojeve ili stringove koje mu damokao parametre. Isto je tono kada itamo s tipkovnice. U tom sluaju trebamo objekt koji je spojen na tipkovnicu ikoji ima metode kojima moemo pristupiti znakovima koje kucamo na tipkovnici.

    U Javi postoji takav objekt i naziva se System.in. Naalost posjeduje veoma limitiran broj metoda. Posjedujejednu metodu readkoji e proitati sve to korisnik upie, ali ga je teko koristiti jer ita samojedan karakter.

    Nije teko konstruirati klasu s boljim setom metoda. U ovome teaju koristit emo jednu klasu nazvanuConsoleReader.

    Kad je elimo koristiti u programu na poetku programa napiemo:

    ConsoleReader in = new ConsoleReader(System.in);

    Primijetite da se radi o deklaraciji varijable. Ova deklaracija kreira novi objekt tipa klase ConsoleReader koji

    moe pristupiti System.in objektu koji je spojen na tipkovnicu.U isto vrijeme kreira se varijabla in tipa ConsoleReaderkoja oznaava taj objekt.

    Kad se izvri ta naredba objekt koji nam je potreban odsad je prisutan u memoriji i njegove metode moemo

    pozivati koristei njegov naziv in. (Moemo ga i drukije nazvati)

    ConsoleReader objekt posjeduje tri korisne metode:

    in.readInt() vraa int vrijednost.

    To e biti cijeli broj koji korisnik utipka. Npr. izraz :

    int broj = in.readInt(); //e kreirati varijablu broji pridruiti joj vrijednost koja se ukuca s tastature.

    in.readDouble(); // vraa double vrijednost.

    in.readLine(); // vraa string. Sastojat e se od znakova koje korisnik ukuca do kraja linije.

    Ovo je nova verzija programa za preraun maraka u eure.

    Zapoinje se kreiranjem ConsoleReaderobjekta, koji je oznaen sa in. Tada trai od korisnika da utipkavrijednosti maraka i pfeniga. Naredbe koje itaju vrijednosti naznaene su podebljano (ne i u stvarnom koduprograma) .

    PRIMJER 5

    public class Mjenjacnica2

    { /* Ucitaj iznos u markama i preracunaj u eure */

    public static void main(String[] args)

    {

    ConsoleReader in = new ConsoleReader(System.in);System.out.println("Unesi iznose eura i centa");

    System.out.print("Iznos u eurima =");

    int eura = in.readInt();

    System.out.print("Iznos u centima =");

    int centa = in.readInt();

    centa = 100*eura + centa;

    double kuna = centa * 0.0751;

    System.out.print("Kuna: ");

    System.out.print(kuna);

    }

    }

  • 7/29/2019 62001558-ProgramiranjeUJavi

    24/162

    2.Brojevi i znakovni nizovi

    24

    Na ekranu bi trebalo nakon svega pisati (ono to korisnik ukuca je ovdje naznaeno podebljano)

    Unesi iznose eura i centa

    Iznos u eurima = 110

    Iznos u centima = 55

    Kuna: 830.2305

    ConsoleReader objekt nije robustan. Npr. ako unesete dva broja u jednu liniju ili ako unesete slova umjestobroja program e javiti run-time greku.

    Prije pokretanja bilo kojeg programa koji koristi klasu ConsoleReader potrebno je da istu imate u istome

    direktoriju kao i program u kojem je koristite.

    Pretpostavimo da elite koristiti primjer 5. Prvo ete primjer ukucati u datoteku s istim nazivom kao i klasa dakleMjenjacnica2.java. U isti direktorij kopirajte i datoteku ConsoleReader.java. Tada prevedite i

    pokrenite Mjenjacnica2 na uobiajen nain. Kada Java prevodilac vidi da java koristi ConsoleReader klasu,automatski e je prevest.

    6. Znakovni niz - string.

    Nadalje emo se koristiti izrazom string. Stringje jedan od najee koritenih tipova podataka u Javi.

    Niz znakova (literalstring) moemo napisati kao niz znakova zatvorenih u dvostruke navodnike poput slijedeeg:

    "Jedan dan"

    Literal stringovi mogu biti proizvoljne duljine, te ukljuivati bilo koji znak. ak moete imati i string bezkaraktera. Takav string nazivamo prazan string i zadaje se kao "".

    String moe sadravati kontrolne znakove (control characters). Ti znakovi znae stvari poput novog reda,

    tabulatora, ... Ako ispisujete string koritenjem System.out.println metode i ako ta metoda naie nakontrolni karakter npr. na newline kontrolni karakter ona e tada pomaknuti kursor na novi red.

    Ako elite ukljuiti kontrolni karakter u literalni string, potrebno je koritenje\ karaktera nakon kojega slijedislovo. \ se naziva escape karakter. Koristi se i za uvoenje odreenih karaktera u string poput " koji bi inaeznaio kraj stringa. Slijedi lista najznaajnijih kombinacija karaktera:

    \n novi red (newline)

    \t tabulatorpomak (tab)\b nazad (backspace)

    \r returnpomak na poetak slijedee linije\f line feedpomak na slijedeu liniju bez odlaska na poetak\\ \ znak

    \" " znak\' ' znak

    Npr. izraz

    System.out.print("Jedan\ndan");

    napisat e Jedan u jednu liniju te danu slijedeu liniju.

    Ako elite pohraniti string da bismo ga koristili kasnije u programu koristit emo varijablu tipa String. Slijediprimjer izraza koji kreira novu varijablu tipa String, nazvanu automobil kojoj dodjeljuje vrijednost "BMW".

    String automobil = "BMW";

  • 7/29/2019 62001558-ProgramiranjeUJavi

    25/162

    2.Brojevi i znakovni nizovi

    25

    Nije ispravno da e ovaj izraz pohraniti string "BMW" na memorijsku lokaciju varijable automobil. to sestvarno dogaa ukljuuje jednu vrlo bitnu osobinu rada s memorijom Svaka lokacija u memoriji ima svoju adresu(reference value or address).To je slino kao to svaka kua u gradu ima svoju potansku adresu

    Kad se izvri gornji izraz izvre se slijedei koraci:

    (1) Kreira se varijabla nazvana automobil(2) String "BMW" pohrani se u drugi dio memorije !

    (3) Referenca (adresa) gdje je string pohranjen dodijeli se varijabli automobil.

    Rezultirajue stanje u memoriji moe se prikazati dijagramom na slijedeoj slici.

    automobil

    B M W

    Strelica od varijable prema stringu reprezentira injenicu da varijabla sadri referencu na lokaciju gdje jestring pohranjen.

    Ovaj nain tretiranja String varijable znai da je sama varijabla uvijek iste veliine dovoljno velika da sadrivrijednost reference (adrese)

    Npr. ako kasnije izvrimo naredbu:

    automobil = "Alfa Romeo";

    varijabla automobil e nakon toga opet sadravati vrijednost reference, dakle istu koliinu memorije. Razlikaje u tome to e to biti referenca na neki drugi dio memorije koji sada sadri drugi(dui) string "Alfa Romeo".

    Postoji jedan vrlo koristan operator koji se moe primijeniti na stringove. Naziva se operator spajanja(concatenation) i oznaava se znakom +.

    Ako su st1 i st2 stringovi, onda st1+ st2 znai string koji se sastoji od svih karaktera st1 nakon kojih slijedekarakteri iz stringa st2.

    Npr. ako je varijabli automobil dodijeljena referenca na string "BMW" onda e izraz

    "Novi " + automobil + " je skup."

    znai string:

    "Novi BMW je skup."

    Izrazi poput ovoga mogu se koristiti bilo gdje u programu gdje je potreban neki sloeni izraz. Npr. slijedei izraz :

    System.out.println("Novi " + automobil + " je skup.");

    e ispisati na ekranu "Novi BMW je skup."

  • 7/29/2019 62001558-ProgramiranjeUJavi

    26/162

    2.Brojevi i znakovni nizovi

    26

    Kako esto trebamo ispisivati poruke koje sadre i brojeve Java doputa da se kombiniraju brojevi i stringovikoritenjem + operatora.Npr. cijenaje cjelobrojna vrijednost koja sadri vrijednost 30000. Tada e izraz:

    "Cijena novog " + automobil + " je " + cijena + " eura".

    znaiti string:

    "Cijena novog BMW je 30000 eura".

    Primijetite da je Java uzela vrijednost iz varijable cijena i pretvorila je u string sa znamenkama pogodnim prikazu

    cijelih brojeva.

    I u primjerima 2 i 3 mogli smo koristiti slian nain :

    Izraze:System.out.print("Racun je: ");

    System.out.print(total/100);

    System.out.print(" kn i ");

    System.out.print(total%100);System.out.println(" lipa.");

    Mogli smo zamijeniti s jednim izrazom:

    System.out.println

    ("Racun je: "+ (total/100) + " kn i " +

    (total%100) + " lipa." );

    Tonije, zagrade oko izraza total/100 i total%100 nisu potrebne jer Java primjeni pravilo da operatori / i %imaju vei prioritet od operatora +.

    Slijedi program koji obavlja luckastu konverzaciju s korisnikom. Program ita korisnikovo ime i dodjeljuje gavarijabli ime. Takoer program starost korisnika i dodjeljuje ga varijabli godina. Nakon toga koristi te dvijevrijednosti da bi konstruirao par reenica koje e ispisati na ekran.

    Program zapoinje konstrukcijom ConsoleReaderobjekta da bi mogao itati to korisnik utipka. U ovomsluaju taj objekt je oznaen nazivom korisnik. Metoda korisnik.readLine()koristi se za itanje imena, a metoda user.readInt()za itanje broja godina.

    PRIMJER 6

    public class Prica

    { /* Pricaj s korisnikom. */

    public static void main(String[] args)

    { ConsoleReader korisnik =

    new ConsoleReader(System.in);

    System.out.println

    ("Bok ! Kako se zove?");String ime = korisnik.readLine();

    System.out.println

    ("Koliko ima godina " + ime + "?");int godina = korisnik.readInt();System.out.print(godina + " su lijepe godine, ");

  • 7/29/2019 62001558-ProgramiranjeUJavi

    27/162

    2.Brojevi i znakovni nizovi

    27

    System.out.println

    ("ali " + (godina+1) + " je bolje.");

    System.out.println

    ("Vidimo se kasnije " + ime + "!");

    }

    }

    Ovo bi se trebalo pojaviti na ekranu kad se program pokrene. (Korisnikov unos je podebljan.)

    Cao. kako se zove?Ivica.

    koliko ima godina Ivica?2020 su lijepe godine , ali 21 je bolje.

    Vidimo se kasnije Ivica!

    Stringovi imaju mnogo korisnih metode koje su vezane za njih.

    Jedna od vrlo korisnih se naziva substring. Java koristi konvenciju da su karakteri unutar stringa numerirani s

    0, 1, 2, ... s lijeva nadesno. Pretpostavimo da stoznaava string , a da su m i n cjelobrojne vrijednosti. Tada izraz :

    st.substring(m,n)

    daje novi string koji se sastoji od karaktera stringa st, poevi od pozicije m i zavravajui s pozicijom n-1. (n jeprva pozicija koja nije ukljuena !). Npr. ako varijabla automobil oznaava string"Mercedes", onda izraz

    automobil.substring(5,8)

    e dati string"des",kako je to dolje pokazano.

    M e r c e d e s

    0 1 2 3 4 5 6 7 8

    Navest emo jo neke standardne metode koje moemo koristiti u radu sa stringovima. U svakom primjeru stoznaava string.

    st.length() Daje broj znakova u stringu ("duljina" stringa st)

    Npr. "Mercedes".length()vraa vrijednost 8.

    st.toLowerCase() Daje string sa svim velikim slovima pretvorenim u mala slova.

    Npr. "Mercedes".toLowerCase()

    vraa string"mercedes"

    st.UpperCase() Daje string sa svim malim slovima pretvorenim u velika slova.

    Npr. "Mercedes".toUpperCase()

    vraa string"MERCEDES"

    Ako ste izraunali broj i elite ga pretvoriti u odgovarajui string sve to je potrebno je kombinirati prazni string ibroj koristei + operator. Npr. ako varijabla rezultat sadri vrijednost 142, onda izraz"" + rezultat eproizvesti string"142".

    To radi jer Java koristi pravilo koje kae da ako kombinirate string i broj pomou operatora +, broj e bitikonvertiran u string, a zatim e oba stringa biti spojena. U ovome sluaju string nastao iz zbroja je spojen s praznimstringom.

    U drugom smjeru nije tako jednostavno. Potrebno je koristiti neki od slijedeih metoda.

  • 7/29/2019 62001558-ProgramiranjeUJavi

    28/162

    2.Brojevi i znakovni nizovi

    28

    Integer.parseInt(st) Ako string stpredstavlja cjelobrojnu vrijednost ovo e dati odgovarajuuvrijednost

    Double.parseDouble(st)Ako string st predstavlja broj u pokretnom zarezu ovo e datiodgovarajuu vrijednost.

    Na kraju ovog dijela jo pokoje pravilo o kombiniranju brojeva i stringova koritenjem + operatora. Razmotrimoslijedee izraze:

    "Rezultat je " + 3 + 7

    3 + 7 + " je rezultat"

    na prvi pogled izgleda kao da elimo rei istu stvar. Meutim ako ih ispiemo koristei metoduSystem.out.println vidjet ete da ete dobiti sasvim neto drugo.

    Da biste predvidjeli to e se u ovakvim sluajevima potrebno je koristiti slijedee pravila:

    Ako Java treba odrediti vrijednost izraza x+y gdje su x i y bilo brojevi ili stringovi, tada e se dogoditi slijedee:

    (1) Ako su x i y oboje stringovi onda e ih spojiti.Ako je jedan string, a drugi broj onda e pretvoriti broj u string i spojiti ga s drugim stringomAko su x i y oboje brojevi bit e zbrojeni.

    Ako se rauna izraz koji sadri vie + operatora izraz se rauna slijeva nadesno !

    Ponovo razmotrimo izraz:

    "Rezultat je " + 3 + 7

    Prvo to e Java obraditi je"rezultat je

    "+ 3. Pretvorit e broj 3 u string "3", spojiti ga s prvim stringom

    i dati"Rezultat je 3". Zatim e obraditi"Rezultat je 3" + 7, i konano dati string:

    "Rezultat je 37"

    Sad razmotri:

    3 + 7 " je rezultat"

    Ovaj put e Java prvo zbrojiti 3 i 7 i dati broj 10. Zatim e obraditi 10 + " je rezultat "i konano dati:

    "10 je rezultat "

    7. Zadaci za poglavlje 2

    Za ove zadatke kreirajte direktorij P2 unutar direktorija JProg.

    Potrebno je unijeti i prevesti i izvriti 4 zadatka.

    1. Zadatak (Koristi naziv klase i datoteke Aritmetika)Napii program koji trai od korisnika da ukuca dva cijela broja i zatim ispii:

    sumu

    razliku

    umnoakprosjek (double !)udaljenost (apsolutna vrijednost razlike)

  • 7/29/2019 62001558-ProgramiranjeUJavi

    29/162

    2.Brojevi i znakovni nizovi

    29

    1Koristi metodu Math.abs za raun apsolutne vrijednosti

    2. Zadatak (Koristi naziv klase i datoteke Mjenjacnica)

    Napii program koji uitava iznos u kunama i preraunava ih u eure (kurs npr. 1 euro = 7.50kn)

    3. Zadatak. (Koristi naziv klase i datoteke Upoznavanje)Napii program koji e ispisati prva dva reda kao to je prikazano, zatim uitati ime i nakon toga ispisatipozdrav. Podebljan je upis od strane korisnika . Ime moe biti bilo koje.

    Bok. Moje ime je Java.Kako se ti zove ?Ivica

    Ivica ! Drago mi je to smo se upoznali.

    4. Zadatak. (Koristi naziv klase i datoteke Tablica)

    Napii program koji e nacrtati tablicu na ekranu..+--+--+--+

    | | | |

    +--+--+--+

    | | | |

    +--+--+--+

    | | | |

    +--+--+--+

    Uini to na nain da kreira dvije string varijable za oba uzorka pa onda te varijablenaizmjenino ispii.

  • 7/29/2019 62001558-ProgramiranjeUJavi

    30/162

    3. Objekti i klase

    30

    3. Objekti i klase

    U prva poglavlja koristili smo nekoliko objekata: objekt koji se zove System.out za slanje informacija na izlaz,ConsoleReader za itanje informacija s tipkovnice, i String objekt.Ovo poglavlje bavi se konstruiranjem novih objekata. Veinom emo se baviti konstruiranjem objekta koji esadravati informacije o studentu.

    Sadraj:

    1. to je to objekt ?2. Klasa student

    3. Vie o klasama4. Reference na objekte (Objects References).

    5. null vrijednost

    6. Identifikatori

    7. Zadaci

    1. to je to objekt?

    U ranim danima programiranja prvi programski jezici poput Fortrana dozvoljavali su programerima da rukuju s

    vrlo ogranienim skupom tipova podataka npr. cijeli brojevi, brojevi s pokretnim zarezom i nizovi brojeva.Nekih 10 godina kasnije programski jezik Simula 67 omogui je programerima definiranje vlastitih tipovapodataka nazvanih objekti. Objekti su se dokazali kao jedna od najznaajnijih inovacija u programiranju. Danaspredstavljaju osnovu programskih jezika poput C++, Java, C# pa ak i Visual Basica.

    to je to objekt ? Postoje dva gledita na objekt. Jedno sa strane programera koji koristi objekt, a drugo sa straneprogramera koji dizajner objekt. Prvog programera nazvat emo "korisnik", a drugog programera "dizajner" (modaje bolji naziv "konstruktor"). esto se dogaa da isti programer prvo dizajnira objekt, a zatim ga koristi.Meutimvidjeli smo na primjeru objekata tipa ConsoleReader da je taj objekt dizajnirao neki drugi programer, a mi smo gavrlo lako koristili.

    Razlika u tome to dizajneru predstavlja objekt , a to predstavlja korisniku nije samo ograniena na Javu.Pogledajte na va sat(ako ga imate). Ako je dobro dizajniran omoguavat e oitavanje vremena, promjenuvremena, start-stop funkciju toperice, itd. vama kao korisniku nije potrebno poznavati to se dogaa unutar sata,koji su to mehanizmi koji stoje iza svih njegovih funkcija. Vi ste "korisnik" sata. S druge strane osoba koja je

    dizajnirala sat znat e sve to se dogaa unutra. Dizajneri e potroiti dosta vremena pokuavajui konstruirati satda bi vama omoguili koritenje uobiajenih funkcija sata.

    Istoje tono za bilo koji ureaj npr. automobil, mobitel, ...

    Iako ih ne moete opipati Java objekti su isto tako realni. Programer korisnik je upuen koje su funkcije pridruenepojedinoj vrsti objekata. te funkcije nazivamo suelje (interface). Programer koji je programirao objekt zna koje ese operacije izvravati kad se te funkcije pozovu. Taj dio nazivamo implementacija objekta.

    Korisnik e na pitanje "to je to objekt" odgovoriti s "Ne znam od ega se sastoji ve mi je poznato njegovo sueljei to mogu s njim uiniti". Dizajner e odgovoriti s: "Sastavljen je od varijabli i metoda koje meusobno djeluju dabi realizirale suelje objekta.

    U ovom poglavlju pokuat emo objasniti kako objekti izgledaju sa stanovita dizajnera objekata. U stvaridizajnirat emo pojedine objekte.

    Svi objekti koji se grade na osnovu istog dizajna pripadaju istoj klasi. Dizajn klase je dio programa koji nazivamo

    definicija klase.

  • 7/29/2019 62001558-ProgramiranjeUJavi

    31/162

    3. Objekti i klase

    31

    2. Klasa Student

    Zamislite da emo u Javi napisati program koji e u bazi podataka odravati podatke o svim studentima na ovomefakultetu. Program poput toga vjerojatno bi sadravao mnogo razliitih tipova objekata. Jedan o tipova bi sigurnobio onaj koji bi sadravao podatke o pojedinom studentu. Za oekivat je i postojanje objekta koji bi predstavljao

    listu svih studenata u bazi podataka.

    U ovome poglavlju neemo pokuavati napisati kompletan program ve emo se koncentrirati na dizajn objekata ito na objekt koji e sadravati podatke za pojedinog studenta. klasu koja predstavlja dizajn te vrste objekta nazvatemo Student.

    Ako bismo dizajnirali sat, poeli bismo od ideje kako konstruirati suelje tj. skup operacija koje sat treba izvoditi.Nakon toga bismo radili na implementaciji suelja, odnosno kako sloiti stavi unutar objekta da se osigura traenafunkcionalnost.

    Slino, prvo u definiranju klase Student je odluka koje operacije e biti asocirane s objektom tipa Student.

    Da bismo odrali jednostavnost primjera ukljuit emo ogranieni skup operacija:

    Bit e potrebno omoguiti mijenjanje godine studenta s 1 na 2 ili 2 na 3. Ova akcija e se normalno odvijati nakraju godine.

    Bit e potrebno omoguiti promjenu programa studija (stupnja)

    Bit e potrebno omoguiti nain da objekt vrati ime studenta kako bi program mogao ispitati kojemu studentupripada odgovarajui objekt. Dobivanje ostalih informacija zasad neemo realizirati.

    Bit e potrebno omoguiti ispisivanje podataka o studentu na ekran. Osigurat emo metodu prikaz koja e toiniti.

    Bit e potrebno kreirati nove objekte tipa Student. Svaki put kad bude kreiran bit e potrebno dati informacije ostudentu, npr. ime, program studija (stupanj) , ...

    Sad je vrijeme za definiciju klase student. U terminologiji runog sata, potrebno je odrediti kako e pojedinekomponente biti rasporeene i povezane unutar kuita da bi proizvele sat koji radi.

    Svaki objekt u Javi sastavljen je od nekog broja odvojenih dijelova nazvanih lanovi (members). Postoje tri vrstelanova.

    Varijable. U ove lanovi spremaju se informacije koje objekt sadri. Npr. Student objekt moe sadravativarijablu koje sadri studentovo ime i drugu koja sadri naziv programa studija. Skup vrijednosti kojesadre varijable pojedinog objekta nazivaju se stanje (state) objekta.Da bismo razlikovali te varijable od varijabli koje smo definirali unutar metoda (u prolom poglavlju),varijable koje pripadaju objektu nazivamo polja (fields) ili varijable instance (instance variables).

    Metode. Ovi lanovi izvravaju operacije na objektu (ili s objektom). Npr. vidjeli smo da ConsoleReader objektima metodu koja se naziva ReadInt koja koristi taj objekt da bi se dobila vrijednost koju je korisnik utipkao.

    Kada napiemo definiciju klase Student imat emo metodu uNovuGodinukoja e dodavati jedan na tekuustudentovu godinu.

    Ova vrsta metoda nazivaju se metode instance (instance methods) kako bi ih razlikovali od statikih metoda kojene pripadaju nijednom objektu (vie o statikim metodama kasnije

  • 7/29/2019 62001558-ProgramiranjeUJavi

    32/162

    3. Objekti i klase

    32

    Konstruktori. Ovi lanovi se koristeda bismo konstruirali objekte odreene klase. U klasu student ukljuit emojedan konstruktor jer inae ne bi bilo mogue napisati program koji bi koristio objekte te klase. Konstruktori su vrloslini metodama na mnogo naina.

    Sad emo specificirati koje e lanove posjedovati objekti tipa Student. Prvo emo definirati polja (fields) . Tevarijable sadravat e informacije koje su pohranjene u svakom objektu tipa Student. Pretpostavimo za sada 4informacije (slae se sa zahtjevima operacija navedenih prije.)

    1. Studentov ID.

    2. Ime.3. Naziv programa.

    4. Godina studija.

    Potrebno je odabrati nazive za ta polja i odluiti koji e se tip podataka koristiti.Npr. ID broj moe biti cijeli broj ili string. ID broj je u stvarnosti samo niz karaktera. Nee biti nikakve razlike akose sastoji od niza znakova umjesto od znamenaka. Zbog toga emo odabrati tip podatka String . Ime studenta inaziv programa studija takoer e biti tipa String. Godina studija bit e cjelobrojna vrijednost tipa int.

    Slijede definicije polja. Linije koje poinju s //su komentari koji objanjavaju sadraj svakog polja. Java ignorirasve od // do kraja reda.

    private String idBroj;

    // ID broj Studenta.

    private String ime;

    // studentovo ime.

    private String programStudija;

    //Program studija.

    private int godina;// Godina studija

    // (1, 2 ili 3).

    Rije privateodreuje da se polju ne moe direktno pristupiti izvan definicije klase Student. Ako programer"korisnik" objekta napie kod koji zove takvu varijablu prevodioc e javiti greku prevodioca. Polja u klasi suobino oznaena kao private. (Kad doemo do metoda asociranih sa objektom Student, vidjet emo dapoinju s rijeju private koja znai da to metodu moe pozvati korisnik objekta.

    Nakon rijei private dolazi tip vrijednosti koje spremamo u polje te naziv polja. Cijela linija predstavljadeklaraciju varijable. Mogue je ukljuiti i inicijalnu vrijednost.

    Kad smo odabrali polja koja e objekt sadravati, sad trebamo napisati metode koje e izvravati osnovne operacijepridruene objektu.

    Prvo emo konstruirati metodu koja e se koristiti za promjenu studentovog programa studija. Nazvat emo jesetProgramStudija. Kad je pozovemo bit e potrebno znati koji je novi naziv novog programa studija. Tadodatna informacija bit e parametarmetode. Openito metoda moe imati bilo koji broj parametara. Svaki putkad pozovemo metodu svakome od tih parametara bit e dodijeljena vrijednost koju e moi koristiti tijekomizvravanja metode.

    setProgramStudija ima samo jedan parametarnaziv studentovog novog programa. U definiciji metoda tajparametar nazvat emo jednostavno p.

  • 7/29/2019 62001558-ProgramiranjeUJavi

    33/162

    3. Objekti i klase

    33

    Tijelo svakog parametra sastojat e se od niza izraza koji e izvravati potrebne akcije. U ovom sluaju potrebna jesamo jedna akcija: novi naziv programa studija (dakle parametar p) potrebno je pohraniti u polje

    programStudija. Slijedee dodjeljivanje e obaviti taj zadatak:

    programStudija = p;

    Slijedi kompletna definicija metoda setProgramStudija:

    /* Promijeni programStudija u p. */

    public void setProgramStudija(String p)

    { programStudija = p;

    }

    Kao obino poinjemo s komentarom to program radi. Slijedea linija je zaglavlje metoda .Svaka od rijei ima znaenje:

    publickae da se metoda moe koristiti bilo gdje u programu, dakle i unutar klase i van definicije klase

    voidkae da metoda ne vraa nikakvu vrijednost.

    setProgramStudija je naziv metode.

    (String p)je lista svih parametara metode. U ovome sluaju radi se o samo jednom parametru koji je tipaString , a naziva se d.

    Na kraju imamo tijelo metoda zatvoreno u vitiaste zagrade{"}. U ovome sluaju tijelo metoda sastoji se samo odjedne naredbe.

    Pretpostavimo da programer korisnik pie nekakav program u nekoj drugoj klasi odvojeno od klase student.

    Pretpostavimo da je kreirao odreeni objekt studenta i pridodijelit ga varijabli stud1. Tada ako programer elipostaviti za tog student program studija na npr. na strojarstvo moe pisati naredbu:

    stud1.setProgramStudija(strojarstvo);

    Ovaj naredba kae: izvri metodu setProgramStudija koja je asocirana s objektom stud1 (tipa Student)koristei vrijednost parametra "strojarstvo".

    Rezultat e biti e polje objekta programStudija biti postavljeno na vrijednost strojarstvo.

    Slijedee emo definirati metodu koja dodaje jedan na studentovu godinu studija. Ovo je jo jednostavnije jermetoda nema nikakvih parametara. Cijelo tijelo je izraz koji dodaje jedinicu na polje godina.

    godina++;

    Slijedi kompletna metoda.

    /* Poveaj godinu studija za jedan */

    public void povecajGodinu()

    { godina++;

    }

    to kae zaglavlje:

    publicznaida se metoda moe koristiti bilo gdje u programu.

  • 7/29/2019 62001558-ProgramiranjeUJavi

    34/162

    3. Objekti i klase

    34

    voidznai da metoda ne vraa nikakvu vrijednost.

    povecajGodinu je naziv metode.

    ()pokazuje da nema parametara. To znai da se ne prosljeuje nikakva informacija metodu koji se poziva.

    Van klase student slijedei izraz moe biti koriten za dodavanje jedinice na broj godine studenta. Koristimo opetobjekt stud1 (klase Student)

    stud1.povecajGodinu();

    Slijedea metoda vraa ime koje je pohranjeno u objektu tipa Student. Podsjetite se da se toj varijabli ne moepristupiti direktno izvan klase jer je polje imeoznaeno kao private.Metodu smo nazvali getIme. Za razliku od dva prethodna metoda ovaj "vraavrijednost". Vrijednost se vraa namjesto poziva metoda. Pretpostavimo da imamo slijedeu naredbu:

    String st = stud1.getName();

    Java e kreirati varijablu st te nakon toga pozvati metodu

    stud1.getName()

    Metoda e biti pozvana za objekt stud1. (metoda nema parametara) Metoda e vratiti ime studenta, i Java e gapohraniti u varijablu st. Primijetite da je stud1.getName()koriten na isti nain kao to je koriteno npr.Math.sqrt(1.5)

    double x = 1 -Math.sqrt(1.5);

    Ovdje je kompletna metoda:

    /* Vrati studentovo ime. */

    public String getIme()

    { return ime;

    }

    Zaglavlje znai:

    publickae da se metoda moe koristiti bilo gdje.

    Stringkae da metoda vraa vrijednost tipa String.Ovo se naziva vraeni tip podatka (return type).

    getIme je naziv metoda.

    () pokazuje da metoda nema parametara.

    Tijelo metoda je jedna naredba:

    return ime;

    Ona kae: vrati vrijednost polja ime. To je tip naredbe koji nismo dosada sreli. Naziva se naredba vraanjavrijednosti(return statement).

    Zadnja metoda ispisuje na ekran sve informacije o studentu. Nazvat emo je prikaz

  • 7/29/2019 62001558-ProgramiranjeUJavi

    35/162

    3. Objekti i klase

    35

    /* Prikai informacije o studentu na ekran. */

    public void prikaz()

    { System.out.println

    ("Student ID: " + idBroj);

    System.out.println

    ("Ime: " + ime);System.out.println

    ("Program studija: " + programStudija);

    System.out.println

    ("Godina: " + godina);

    }

    Zaglavlje pokazuje da metoda ne vraa nikakvu vrijednost i nema parametara pa e poziv metoda izgledati ovako:

    stud1.prikaz();

    Naposljetku treba napisati konstruktor koji e programer korisnik moi upotrijebiti za stvaranje novih objekata tipa

    Student. Konstruktor uvijek ima naziv identian nazivu klase. U ovom sluaju konstruktor se zove Student.Konstruktor nema naznaku to vraa jer je oito to bi trebao vratiti, a to je objekt koji se njime kreira. Konstruktormoe imati bilo koji broj parametara. Ovaj ovdje ima tri: studentov ID broj, ime i naziv programa studija. Ovdje jepretpostavljeno da e godina studija biti 1 kada je objekt kreiran.

    Slijedi konstruktor:

    /* Kreiraj novog studenta sa zadanim

    ID brojem, imenom i programom studija

    Polje godina bit e postavljeno na 1.*/

    public Student(String id, String im, String p){ idBroj = id;

    ime = im;

    programStudija = p;

    godina = 1;

    }

    Sa dana tri parametra konstruktor e:

    1. stvoriti novi objekt,

    2. pohraniti string id u polje idBroj novostvorenog objekta,

    3. pohraniti string im u polje ime ,

    4. pohraniti string p u polje programStudija ,5. pohraniti 1 u polje godina.

    Primijetite da ne postoji nita u tijelu konstruktora to indicira prvi korak stvaranja objekta. Java to radi automatskikada izvrava konstruktor.

    Slijedi navedeni konstruktor iskoriten u stvaranju objekta tipa Student:

    Student stud1 =

    new Student("9912345", "Ivo Petri", "strojarstvo");

    Ovo znai: prvo kreiraj varijablu nazvanu st koja e se odnositi na Student objekt. Zatim kreiraj novi objekt tipa

    student s podacima naznaenim u listi parametara.

  • 7/29/2019 62001558-ProgramiranjeUJavi

    36/162

    3. Objekti i klase

    36

    Primijetite upotrebu kljune rijei new. Potrebno ju je upotrijebiti svaki put kada s konstruktorom stvaramo noviobjekt. Svaka varijabla koja e oznaavati objekt tipa Student mora biti deklarirana kao varijabla tipa Student.(vrijedi za sve tipove objekata)

    S ovim smo kompletirali definiciju klase Student. Jo ostaje dodati zaglavlje cijele klase. U klasi su prvo stavljenapolja iako redoslijed lanova nije bitan.

    PRIMJER1

    /* Student objekt za studenta FESB-a

    */

    { public class Student

    private String idBroj;

    // ID broj Studenta.

    private String ime;

    // studentovo ime.

    private String programStudija;

    //Program studija.

    private int godina;

    // Godina studija

    // (1, 2 ili 3).

    /* Promijeni programStudija u p. */

    public void setProgramStudija(String p)

    { programStudija = p;}

    /* Poveaj godinu studija za jedan */

    public void povecajGodinu()

    { godina++;

    }

    /* Vrati studentovo ime. */

    public String getIme()

    { return ime;}

    /* Prikai informacije o studentu na ekran. */public void prikaz()