Professional Documents
Culture Documents
Predavanje Java
Predavanje Java
Predavanje Java
ta je program Kako napisati pravilno program za raunar Prednosti i mane korienja Jave Kako program napisan u Javi promeniti u formu koju svaki raunar razume Primer Java koda i komentari
SI1P1 2004
1/15
SI1P1 2004
2/15
SI1P1 2004
3/15
SI1P1 2004
4/15
Kompajliranje
Da bi raunar mogao da izvri odreene zadatke (na primer odtampa ocene koje student dobije na ispitu), moraju mmu se zadati instrukcije za obavljanje zadatka Skup instrukcija koje vode raunar da izvri odreeni zadatak ine raunarski program Mi piemo program (skup instrukcija) u programskim jezicima kao to su C, Pascal ili Java Koristimo ove programske jezike jer su razumljivi oveku Ali kako raunar razume instrukcije koje mu zadajemo?
SI1P1 2004 5/15
Raunari ne razumeju programe napisane u programskim jezicima kao to su Pascal i Java Programi se moraju prvo kompajlirati ili prevesti u mainski kod koji raunar moe da izvrava Program i postupak pomou koga se kod programskog jezika prevodi u mainski kod naziva se kompajler i kompajliranje Razliite platforme, ili hardver sa operativnim sistemom zahtevaju razliit mainski kod, programi se moraju odvojeno kompajlirati za razliite platforme
SI1P1 2004
6/15
Kompajliranje
Java kompajliranje
Java kompajler stvara bytecode, a ne mainski kod Bytecode se konvertuje u mainski kod pomou Java interpretera Tako se moe pokrenuti bytecode na bilo kom raunaru koji ima instaliran Java interpreter
SI1P1 2004
7/15
SI1P1 2004
8/15
Pokretanje programa
Pokretanje programa
SI1P1 2004
9/15
SI1P1 2004
10/15
Izvravanje programa
Primer
elite da napiete program koji sabira dva broja ta predstavlja ulazne podatke za va program?
dva broja
ta va program radi?
sabira dva broja
SI1P1 2004
11/15
SI1P1 2004
12/15
Kada se jednom kompajlira Java program, tada se bytecode moe izvravati na bilo kojoj maini koja ima Java interpreter Zato to se ne mora rekompajlirati prgram za svaku mainu, Java je platformski neutralna Java je bezbedna. Drugim reima, Java i kompajler tite raunar od estih programerskih greaka i opasnih operacija Java standardizuje mnoge korisne operacije kao to je upravljanje mrenim konekcijama i obezbeuje grafiki korisniki interfejs
SI1P1 2004
13/15
SI1P1 2004
14/15
Primer
Izvravanje bytecode pomou interpretera je sporije nego izvravanje mainskog koda, koji je specifian za svaku posebnu platformu. Korienje specifinih mogunosti pojedine platforme (Windows taskbar) je teko pomou Java jezika jer je platformski neutralan. Da bi sse pokrenuo Java program na vie maina, mora se instalirati Java interpreter na svakoj od njih
/* HelloWorld klasa prikazuje Hello, World! na ekranu */ public class HelloWorld { public static void main(String[] args) { // Prikaz Hello, World! System.out.println("Hello, World!"); } }
SI1P1 2004
15/15
SI1P1 2004
16/15
Komentari
Pregled lekcije
Komentari se koriste da opiu napisani kod i da se bolje razume smisao. Java kompajler ga ignorie. Komentari se dobijaju korienjem //, to definie komentar do kraja linije /* */, to definie komentar za sve to se nalazi izmeu, ukljuujui vie linija Primeri dve vrste komentara: /* HelloWorld klasa prikazuje Hello, World! na ekranu */ // Prints Hello, World!
SI1P1 2004 17/15
ta je program Kako napisati pravilno program za raunar Prednosti i mane korienja Jave Kako program napisan u Javi promeniti u formu koju svaki raunar razume Primer Java koda i komentari
SI1P1 2004
18/15
Uvod
ta su promenljive
Tipovi promenljivih Imena promenljivih Dodele vrednosti
SI1P1 2004
19/15
SI1P1 2004
20/15
Promenljive
Promenljive
U matematikoj algebri, promenljive su simboli koji predstavljaju odreene vrednosti u formulama Na primer promenljiva x u sledeoj formuli f(x)=x*2+2 Moe predstavljati bilo koju numeriku vrednost Slino, promenljive u raunarskim programimasu simboli koji predstavljaju odreene podatke
Promenljive se mogu predstaviti kao prazne kutije u koje se mogu smestiti odreene vrednosti Na kutiju se moe nalepiti nalepnica sa imenom, na primer KutijaX i koristiti vie puta Takoe mogu se obavljati odreene operacije, bez obzira na sadraj same kutije:
Pomeri KutijuX na policu A Postavi predmet Z u KutijuX Otvori KutijuX Ukloni sadraj iy KutijeX
SI1P1 2004
21/15
SI1P1 2004
22/15
Promenljive i Java
Promenljive u Javi imaju svoj tip. Tip promenljive definie koja vrsta vrednosti se moe zapamtiti u okviru promenljive Analogija sa kutijom tip promenljive je veliina ili oblik prazne kutije U formuli
f(x)=x*2+2
Promenljiva x je broj. Ako je x simbol koji predstavlja re Singidunum, formula nema smisla.
SI1P1 2004
23/15
SI1P1 2004
Celobrojni tipovi: int: veina brojeva se predstavlja pomou ovog tipa long: veliki brojevi, u oblasti istraivanja, finansija, raunara. short: mali brojevi, ne mnogo korisno. byte: veoma mali brojevi Floating Point (Decimalni) tipovi: float: Single-precision decimalni brojevi double: Double-precision decimalni brojevi Ostali tipovi: String: tekstualni tip. boolean: tano ili netano (true ili false) char: Alfanumeriki karakteri
24/15
Promenljive se kreiraju tako to se deklarie njihov tip i ime na sledei nain: tip ime; Deklarisanje celobrojne promenljive sa imenom x: int x; Deklarisanje stringa sa imenom pozdrav: String pozdrav; U prethodnim primerima promenljive nisu dodeljene vrednosti, ve su samo formirane prazne kutije
SI1P1 2004
25/15
SI1P1 2004
Imena promenljivih (identifikatori) mogu biti proizvoljne duine, ali moraju poeti sa: slovo (a z), znak dolar ($), ili, donjom crtom ( _ ). Imena promenljivih ne mogu sadravati specijalne operacione simbole kao to su +, -, *, /, &, %, ^, ... Korienje rezervisanih rei Jave je takoe nelegalno. Na primer class, static, int, ...
Java je case-sensitive razlikuju se mala i velika slova. Bosko nije isto kao bosko, odnosno BOSKO. Treba birati imena promenljivih koja su informativna. Dobar izbor: int studentIspitOcena; Lo izbor: int tempvar3931; Preporuka je da imena promenljivih poinju malim slovom i da svaka re unutar imena poinje sa velikim: studentIspitOcena.
SI1P1 2004
27/15
SI1P1 2004
28/15
Celobrojni tip
Koja imena su validna? 1.$amount 2.6tally 3.my*Name 4.salary 5._score 6.first Name 7.total# 8.short
Postoje etiri osnovna celobrojna tipa podataka: byte, short, int, long. Svaki tip ima maksimalnu vrednost, baziranu na njihovoj binarnoj reprezentaciji: Bytes: 8-bits, 128 Short: 16-bits, 215 32,000 Int: 32-bits, 231 2 billion Long: 32-bits, 263 veoma veliko Integer Overflows: ta se deava ako se pokua smestiti vea vrednost u tip podataka?
SI1P1 2004
29/15
SI1P1 2004
30/15
String tip
Racionalni tip
String nije primitivan tip podataka. Oni nasleuju klasu Object, diskutovae se kasnije. String je niz karaktera izmeu apostrofa i na primerneki tekst. Stringovi mogu koristiti specijalan operator + koji kreira novi String: String pozdrav= Zd+ ravo; String josJedanPozdrav= pozdrav+ !;
Inicijalizuju decimalnu vrednost broja: double y = 1.23; double w = -3.21e-10; // -3.21x10-10 Koristi se d da bi se vrednost prikazala kao decimalna: double y = 1d/3; // y = .333333333 double z = 1/3; // z = 0.0 Zato? Float se moe definisati kao i double, ali treba dodati i f: float z = 1.23f; Double je precizniji nego Floats, ali izvravanje operacija due traje
32/15
SI1P1 2004
Logiki tip
Karakter
Boolean (logiki tip) je tip podataka koji se koristi u situacijama kada postoje dve opcije tano ili netano (true ili false). Vrednosti true i false su case sensitive. Ne prihvata se True ili TRUE. Ovaj tip podataka se koristi za testiranje osobina podataka i za kontrole toka Primer: boolean daLiCitati = true; boolean fileOpen = false;
Karakter je tip podataka koji se koristi da bi se predstavio pojedinaan karakter, kao to je slovo, broj, odreeni znak ili neki drugi simbol. Karakteri su pojedinani simboli smeteni izmeu jednostrukih navodnika Ne treba ih izjednaavati sa String-ovima. Primer: char prvoSlovoImena = 'e' ; char pitanje = '?' ;
SI1P1 2004
33/15
SI1P1 2004
34/15
Pitanja
Koje tipove podataka treba koristiti za sledee informacije?: 1. Broj stanovnika Srbije 2. Broj stanovnika na Zemlji 3. i 4. Status dokumenta (otvoren/zatvoren) 5. Ime 6. Prvo slovo imena 7. $ 237.66 int long double boolean String char SI1P1 2004 double
Iskazi
Iskazi su komande koje dovode do odreenih dogaaja Svi iskazi moraju se zavravati sa ; Deklarisanje promenljiv je jedan iskaz Dodeljivanje vrednosti promenljivoj je jedan iskaz Poziv metoda ili funkcije su iskazi: System.out.println(Hello, World); U narednim lekcijama emo uiti kako da se kontrolie izvravanje iskaza
35/15
SI1P1 2004
36/15
Rezervisane rei
Tipovi podataka
SI1P1 2004
37/15
SI1P1 2004
38/15
Tipovi podataka
SI1P1 2004
39/15
SI1P1 2004
40/15
10
Uvod
ta su operatori
ta su operatori Aritmetiki operatori, kao to su +, Operator dodele vrednosti Inkrement/Dekrement operatori, ++ Relacionalni operatori Kondicionalni operatori
Operatori su specijalni simboli koji se koriste za: -matematike funkcije -iskaze dodele vrednosti -logika uporeivanja Primeri upotrebe operatora: 3+5 // korienje + operatora 14 + 5 4 * (5 3) // korienje +, -, * operatora Izrazi su kombinacija promenljivih, konstanti i operatora i definiu odreenu vrednost
SI1P1 2004
41/15
SI1P1 2004
42/15
Grupe operatora
Aritmetiki operatori
Java ima 6 osnovnih aritmetikih operatora: + sabiranje - oduzimanje * mnoenje / deljenje % modul (ostatka) ^ eksponent Prioritet ili izvravanje operacija koje se nalaze u okviru izraza moe se definisati u akronimu PEMDAS.
SI1P1 2004
43/15
SI1P1 2004
44/15
11
Proritet izvravanja operacija(PEMDAS) 1.Parentheses - zagrade 2.Exponents - eksponenti 3.Multiplication and Division from left to right mnoenje i deljenje posmtrano sa leve strane ka desnoj 4.Addition and Subtraction from left to right sabiranje i oduzimanje posmtrano sa leve strane ka desnoj
Primer: 10 + 15 / 5; Rezultat se razlikuje u zavisnosti od toga da li se prvo izvrava sabiranje ili deljenje (10 + 15) / 5 = 5 10 + (15 / 5) = 13 Ako ne postoje zagrade Java e izvriti drugi sluaj Trebalo bi koristiti uvek zagrade da bi se izbegla konfuzija
SI1P1 2004
45/15
SI1P1 2004
46/15
Celobrojno deljenje
U prethodnom primeru rezultat deljenja (10 + 15) / 5 je bio celobrojan (5). Ali ta se deava ako hocmo da izvrimo operaciju 63 / 35? U zavisnosti od tipa podatka u kome su smeteni brojevi, dobijamo razliite rezultate. int i= 63; int j= 35; System.out.println(i/ j); Izlaz: 1 double x= 63; double y= 35; System.out.println(x/ y); Izlaz: 1.8 Rezultat celobrojnog deljenja je samo ceodeo dobijenog rezultata!
Osnovni operator dodele (=) dodeljuje vrednost ex promenljivoj var var= expr; Java dozvoljava da se kombinuju aritmetiki i operator dodele u jedinstven operator Primeri: x= x+ 5; je isto to i x+= 5; y= y* 7; je isto to i y*= 7;
SI1P1 2004
47/15
SI1P1 2004
48/15
12
Inkrement/dekrement
Inkrement/dekrement
SI1P1 2004
++ se zove inkrement operator. Koristi se da bi se poveala vrednost promenljive za 1. Na primer: i= i+ 1; Moe se napisati i kao: ++i; ili i++; -- se zove dekrement operator. Koristi se da bi se smanjila vrednost promenljive za 1. i= i-1; Moe se napisati i kao : --i; ili i--;
49/15
Inkrement / dekrement operator ima dve forme : -Prefix forma ++i; --i; -Postfix forma i++; i--; Prefix forma prvo doda/oduzme 1 od promenljive i tek onda nastavi sa ostalim operatorima u izrazu Primer: int numOranges= 5; int numApples= 10; int numFruit; numFruit= ++numOranges+ numApples; numFruit je dobio vrednost 16 numOranges je dobio vrednost 6
50/15
SI1P1 2004
Inkrement/dekrement
Relacionalni operatori
Postfix forma i++, i -- prvo izvri ceo izraz, pa onda povea/smanji vrednost promenljive Primer: int numOranges= 5; int numApples= 10; int numFruit; numFruit= numOranges++ + numApples; numFruit je dobio vrednost 15 numOranges je dobio vrednost 6
Relacionalni operatori uporeuju dve vrednosti Dobijeni rezultat je logikog tipa (true ili false) u zavisnosti od relacije operanada
SI1P1 2004
51/15
SI1P1 2004
52/15
13
Kondicionalni operatori
int x= 3; int y= 5; boolean result; 1) result= (x> y); U ovom sluaju vrednost promenljive result je false zato to 3 nije vee od 5 2) result= (15 == x*y); U ovom sluaju vrednost promenljive result je true zato to proizvod 3 i 5 jeste jednak 15 3) result= (x != x*y); U ovom sluaju vrednost promenljive result je true zato to proizvod 3 i 5 jeste razliit od 3
53/15
Kondicional operatori se jo nazivaju i boolean (logiki) operatori, jer koriste samo izraze koje imaju vrednosti true ili false.
SI1P1 2004
SI1P1 2004
54/15
Tabela istinitosti
Primer
boolean x= true; boolean y= false; boolean result; 1. result= (x&& y); U ovom sluaju vrednost promenljive result je false 2. = ((x|| y) && x);
SI1P1 2004 55/15
(x|| y) je true (true && x) je true U ovom sluaju vrednost promenljive result je true
56/15
SI1P1 2004
14
Korienje && i ||
Java izvrava skraeno izraunavanje: to znai da pri izraunavanju && i || izraza sa leve ka desnoj strani, im se pronae rezultat prestaje se sa daljim izraunavanjem. Primer: (a && (b++ > 3)) (x || y) Java e izraunati a pre (b++ > 3) x pre y
Korienje && i ||
(a && (b++ > 3)); ta se deava ako je a false? Java nee ni izraunavati izraz (b++ > 3), ako je levi operand false, jer je rezultat automatski false. To dovodi do toga da se vrednost b nee inkrementirati (x || y); ta se deava ako je x true? Slino, nee se izraunati vrednost desnog operanda, jer je rezultat sigurno true.
SI1P1 2004
57/15
SI1P1 2004
58/15
Primer
Operatori
1) Kolika je vrednost promenljive number? int number= 5 * 3 3 / 6 9 * 3; 2) Kolika je vrednost promenljive result? int x= 8; int y= 2; boolean result= (15 == x * y); 3) Kolika je vrednost promenljive result? boolean x= 7; boolean result = (x< 8) && (x> 4); 4) Kolika je vrednost promenljive numCars? int numBlueCars= 5; int numGreenCars= 10; intnumCars= numGreenCars+++ numBlueCars+ ++numGreeenCars;
SI1P1 2004 59/15
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/ opsummary.html
SI1P1 2004
60/15
15
Izrazi
Rezervisane rei
Izrazi su komande koje dovode do odreenih dogaaja Svi izrazi moraju se zavravati sa ; Deklarisanje promenljiv je jedan izraz Dodeljivanje vrednosti promenljivoj je jedan izraz Poziv metoda ili funkcije su izrazi: System.out.println(Hello, World); U narednim lekcijama emo uiti kako da se kontrolie izvravanje izraza
SI1P1 2004
61/15
SI1P1 2004
62/15
Tipovi podataka
Tipovi podataka
SI1P1 2004
63/15
SI1P1 2004
64/15
16
Uvod
SI1P1 2004
65/15
SI1P1 2004
66/15
ta su kontrolne strukture
if struktura
Bez kontrolnih struktura, raunar bi izvravao instrukcije iz programa korak-po-korak Kontrolne strukture omoguavaju promenu: redosled po kome e se instrukcije izvravati koje instrukcije e se izvravati kontrola toka samog programa Kontrolne strukture ukljuuju: blokovske izraze (sve to se nalazi unutar velikih zagrada) izraze odluivanja petlje
67/15
SI1P1 2004
SI1P1 2004
if klauzula doprinosi uslovnom izvravanju programa if (expression) { statement; } next_statement; Izraz expression mora biti logikog tipa i njegova vrednost mora biti true ili false Ako je vrednost izraza expression true, izvravaju se izrazi statement, pa nakon njih next_statement Ako je vrednost izraza expression false, izrazi statement se nee izvriti i program e nastaviti sa izvravanjem next_statement
68/15
17
if struktura
if-else struktura
Osnovna if struktura se moe proiriti dodavanjem else uslova, da bi se definisalo ta se deava ukoliko uslov nije ispunjen if (expression) { statement1; } else{ statement2; } next_statement; Ponovo izraz expression mora biti logikog tipa i njegova vrednost mora biti true ili false Ako je vrednost izraza expression true, izvravaju se izrazi statement1, pa nakon njih next_statement. Ako je vrednost izraza expression false, izvravaju se izrazi SI1P1 2004 statement2, pa nakon njih next_statement.
SI1P1 2004
69/15
70/15
if-else struktura
Ugnjeeni if-else
Mogue je kombinovati vie if-else izraza jedan unutar drugog i nataj nain dobiti viestruke upite if (grade == 'A') System.out.println(Pera je dobio A."); else if (grade == 'B') System.out.println("Pera je dobio B."); else if (grade == 'C') System.out.println("Pera je dobio C."); else System.out.println("Pera je dobio F.");
SI1P1 2004
71/15
SI1P1 2004
72/15
18
switch struktura
switch struktura je drugi nain da se testira vie vrednosti jednog izraza Vrednost izraza expression mora biti tipa char,byte,short ili int, ali ne moe biti long,float, String ili double. switch (expression) { case value1: statement1; case value2: statement2; default: default_statement; } Napomena: Svaki izraz nakon true sluaja e se izvriti
73/15
switch struktura
SI1P1 2004
SI1P1 2004
74/15
switch struktura
break; izraz definie raunaru izlazak iz switch strukture switch (expression) { case value1: statement1; break; case value2: statement2; break; default: default_statement; break; }
SI1P1 2004 75/15
switch struktura
SI1P1 2004
76/15
19
switch struktura
Petlje
Petlje dozvoljavaju izvravanje izraza ili bloka vie izraza nekoliko puta Postoje tri tipa petlji u Javi: for petlje while petlje do-while petlje (nee se razmatrati u okviru ovog kursa)
SI1P1 2004
77/15
SI1P1 2004
78/15
for petlja
for petlja
for (inicijalizacija; uslov; inkrement){ //izrazi } Kontrola for petlje je definisana u okviru prve zagrade i sastoji se iz tri dela 1.Prvi deo, inicijalizacija, postavlja poetne uslove petlje i izvrava se pre samog starta petlje 2. Petlja se izvrava sve dok je uslov true i ponavlja se izvravanje izraza 3. Trei deo kontrolnih informacija je inkrement,koji se koristi za promenu brojaa petlje. Ovaj postupak se izvrava na kraju svake iteracije petlje.
SI1P1 2004
79/15
SI1P1 2004
80/15
20
for petlja
for(int div = 0; div<1000; div++) { if(div% 12 == 0){ System.out.println(div+je deljivo sa 12"); } } U okviru izvravanja ovog primera e se prikazati svaki broj od 0 do 999 koji je deljiv sa 12.
for petlja
SI1P1 2004
81/15
SI1P1 2004
Ako se u uslovu inicijalizacije i inkrementa pojavljuje vie od jedne promenljive, tada su ove promenljive odvojene zarezom. for (i=0,j=0; i*j<1000; i++,j+=2) { System.out.println(i+"*"+j+"="+i*j); } Ne mora se popuniti svaki deo kontrole petlje, ali mora postojati dva puta simbol ; for (int i=0; i<100; ) { sum+=i; i++; }
82/15
while petlja
while petlja
while (expression){ statement } while petlja se izvrava sve dok logiki izraz expression ima vrednost true. Kada expression postane false, izvravanje se nastavlja sa prvom instrukcijom iza petlje Izraz se proverava na poetku petlje, pa ako inicijalno ima vrednost false, telo petlja se nee izvriti nijednom.
SI1P1 2004
83/15
SI1P1 2004
84/15
21
while petlja
SI1P1 2004
85/15
SI1P1 2004
86/15
Pitanja 1
Mogue je unutar bilo koje vrste petlje ubaciti bilo koju vrstu petlje
U okviru programa realizuje se i opcija za podizanje para sa rauna. Kako treba koristiti if strukturu da bi se korektno izvrila data opcija. If struktura se koristi da bi se proverilo da li je iznos koji se podie manji ili jednak trenutnom iznosu u banci.
SI1P1 2004
87/15
SI1P1 2004
88/15
22
Pitanja 2
Pitanja 3
Kako se moe implementirati funkcija AbsoluteValue, funkcija koja kao rezultat vraa pozitivnu vrednost unetog broja Bolje je koristiti if strukturu nego switch.
ta je rezultat izvravanja sledee petlje? for (int i=100; i>=0; i--) { System.out.println(i); }
Brojevi od 100 do 0.
SI1P1 2004
89/15
SI1P1 2004
90/15
ta su nizovi
Niz je serija odeljaka koji slue za smetanje podataka. To je u stvari blok promenljivih. U Javi, nizovi mogu da obuhvate samo jedan tip podataka. Na primer niz moe obuhvatiti samo lanove koji su celobrojni borjevi ili samo lanove koji su stringovi
SI1P1 2004
91/15
SI1P1 2004
92/15
23
Nizovi
Deklarisanje nizova
Nizove definie tip, ime i veliina. Niz od tri celobrojne veliine koji se zove prices:
Deklaracija nizova je slina deklaraciji obinih promenljivih, samo to se koriste srednje zagrade [ ]. tipPodataka[] imeNiza; int[] prices; String[] people; Na drugi nain deklarisanje je mogue: tipPodataka imeNiza[]; int prices[];
Pojedinana vrednost u okviru niza je element niza. Pozicija svakog elementa u okviru niza je njegov indeks.
93/15
SI1P1 2004
SI1P1 2004
94/15
Rezervisanje prostora
Indeksi
Za razliku od obinih promenljivih pri korienju nizova, potrebno je rezervisati eljenimemorijski prostor. (U jeziku C postoji naredba malloc()) Koristi se kljuna re new da bi se rezervisala memorija: imeNiza = new tipPodataka[veliina]; prices = new int[3]; people = new String[4]; Prvi primer rezervie prostor za niz celih brojeva veliine 20, a drugi primer niz Stringova veliine 10. Moe se kombinovati deklaracija sa rezervisanjem int[] prices=new int[3];
SI1P1 2004
95/15
SI1P1 2004
Pojedinanom elementu niza se pristupa pomou njegovog indeksa. U Javi indeksi kreu od broja 0 i poslednji ima indeks n-1, gde je n veliina niza. Na primer niz prices ima veliinu 3, i njegovi elementi imaju indekse 0, 1, i 2. uvati se Array out of Bounds greaka. imeNiza[indeks] Sa elementima niza se moe postpuati kao sa obinim promenljivima prices[0] = 6; prices[1] = 80; prices[2] = 10;
96/15
24
Korienje nizova
Inicijalizacija nizova
Elementima niza Stringova se pristupa na identian nain: String[] people; people = new String[4]; people[0] = Lana; people[1] = Pera; people[2] = Mika; people[3] = Maja;
Mogu se definisati i svi elementi niza, pri njegovom deklarisanju. Tada se koristi velika zagrada da bi se odvojili elementi niza od ostatka koda i zarez da bi se odvojili pojedinani elementi. String[] people= {Lana,Pera, Mika, Maja}; int[] prices = {6, 80, 10}; Svi elemnti niza i ovom sluaju moraju biti istog tipa.
SI1P1 2004
97/15
SI1P1 2004
98/15
Korieni pojmovi
Pitanja
Rezervisanje prostora kreiranje prznaog memorijskog prostora, u koji e se smestiti niz. Inicializacija Popunjavanje rezervisanog prostora za niz sa inicijalnim vrednostima. Element pojedinani lan niza. Indeks pozicija elementa u okviru niza. Veliina ili duina niza - Broj elemenata niza.
SI1P1 2004
99/15
SI1P1 2004
100/15
25
Duina niza
Svaki niz ima svoju osobinu kojoj se moe pristupiti po imenu length Pristup ovoj osobini se odvija na sledei nain: imeNiza.length; String[] people = {Lana,Pera, Mika, Maja}; int numPeople = people.length; Vrednost promenljive numPeople je 4. Nizovi su uvek iste duine. Njihova duina se ne moe menjati od trenutka kada su kreirani.
Primer
Primer koda: String[] names = {Lana,Pera, Mika, Maja}; for(int i=0; i<names.length; i++) System.out.println(names[i]+!"); Rezultat: Lana! Pera! Mika! Maja!
SI1P1 2004
101/15
SI1P1 2004
102/15
Primer 2
Primer 3
Koji je sadraj niza c nakon izvravanja datog programskog segmenta? int [] a = {1, 2, 3, 4, 5}; int [] b = {11, 12, 13}; int [] c = new int[4]; for (int j = 0; j < 3; j++) { c[j] = a[j] + b[j]; }
SI1P1 2004
103/15
SI1P1 2004
104/15
26
Primer sortiranja 1
public class BubbleSort { public static void main(String[] args) { int[] test = {52,654,15,994,2,35,12,5,7,9}; for (int j = 1; j < test.length; j++) { for (int i = 1; i < test.length; i++) { if (test[i - 1] > test[i]) { final int tmp = test[i - 1]; test[i - 1] = test[i]; test[i] = tmp; } } } for (int i=0; i<test.length; i++) { System.out.println(test[i]); } } }
SI1P1 2004 105/15
Primer sortiranja 2
public class BubbleSort { public static void main(String[] args) { int[] test = {52,654,15,994,2,35,12,5,7,9}; boolean sortirano = false; while (!sortirano){ sortirano = true; for (int i = 1; i < test.length; i++) { if (test[i - 1] > test[i]) { final int tmp = test[i - 1]; test[i - 1] = test[i]; test[i] = tmp; sortirano = false; } } } for (int i=0; i<test.length; i++) { System.out.println(test[i]); } } SI1P1 } 2004
106/15
Dvodimenzionalni nizovi
Dvodimenzionalni nizovi
Nizovi koji su do sada razmatrani mogu se posmatrati kao jedan red vrednosti Dvodimenzionalni niz se moe posmatrati kao mrea (ili matrica) vrednosti. Svakom elementu dvodimenzionalnog niza se moe pristupiti pomou dva indeksa: redni broj reda i redni broj kolone. Dvodimenzionalni niz je u sutini niz iji je svaki element novi niz
Primer: Karta zemljita je podeljena na mreu 20 x 55 razliitih imanja. U svakom polju treba upisati povrinu odreenog imanja. Prvo je potrebno deklarisati dvodimenzionalni niz: double[][] heights; heights= new double[20][55]; Ovaj dvodimenzionalni niz ima 20 redova i 55 kolona Da bi se pristupilo pojedinanom imanju koje se nalazi u 11-om redu i 23-oj koloni: heights[11][23]
108/15
SI1P1 2004
107/15
SI1P1 2004
27
Viedimenzionalni nizovi
Podnizovi mogu biti razliitih duina: int[][] a = new int[3][]; int[] b = {1,2,3}; int[] c = {4,5,6,7}; int[] d = {8}; a[0]= b; a[1] = c; a[2] = d; Mogu se definisati i viedimenzionalni nizovi: int[][][][] a; // 4-D niz
SI1P1 2004
109/15
SI1P1 2004
110/15
Sadraj lekcije
Koncept metoda
ta je metod Zato koristimo metode Kako da deklariemo metode etiri dela metoda Kako pozvati metod Svrha metoda main Neki primeri metoda
Metodi se jo nazivaju i funkcije ili procedure. Metod je nain da se odreeni broj koraka integrie u poseban deo koda i na taj nain posebno poziva i obrauje. Kada bi sve mogli da se koriste metodi? izraunavanje kvadratne formule, prikaz na ekranu, ...
SI1P1 2004
111/15
SI1P1 2004
112/15
28
Koncept metoda
argumenata
Nakon toga mogu da izvre odreene operacije sa argumentima Na kraju mogu da vrate vrednost koju su dobili kao rezultat izraunavanja, t.j. da generiu izlaz
Kvadratni koren je dobar primer upotrebe metoda. Metod koji slui za dobijanje kvadratnog korena prihvata broj kao argument i kao rezultat vraa kvadratni koren od tog broja.
SI1P1 2004
113/15
SI1P1 2004
114/15
Deklarisanje metoda
Izraunavanje kvadratnog korena obuhvata i vie meukoraka izmeu operacija prihvatanja ulaznog podatka i generisanja izlaza. Kada se koristi ovaj metod, korisnika ne interesuju pojedinani koraci. Jedino to mu je potrebno je da se dobije korektan rezultat. Skrivanje internog rada metoda od korisnika, ali obezbeivanje korektnog rezultata se naziva jo i
Metod ima 4 dela: tip rezultata, ime, argumente, i telo metoda Tip, ime i argumenti, zajedno, se jo nazivaju i potpis metoda
apstrakcija
SI1P1 2004
115/15
SI1P1 2004
116/15
29
Generisanje rezultata
Tip rezultata metoda moe biti bilo kog tipa podataka. Tip metoda se odreuje na osnovu tipa podataka koji se generie kao izlaz. Metod moe i da ne vraa rezultat, u kom sluaju se deklarie kao tipa void.
U okviru metoda se koristi naredba return da bi se definisao rezultat izvravanja operacije metoda. Njegova forma je: return vrednost_izvravanja; Tip promenljive vrednost_izvravanja mora da bude istog tipa kao i tip samog metoda: double sqrt(int num) { double answer; // Izrauna se vrednost kvadratnog korena num // i rezultat smesti u promenljivu answer return answer; }
118/15
SI1P1 2004
117/15
SI1P1 2004
Generisanje rezultata
void metod
Metod se zavrava odmah nakon izvravanja naredbe return Zato je u veini sluajeva return naredba poslednja naredba u okviru metoda Metod moe imati i vie return naredbi. int absoluteValue(int num){ if (num < 0) return num; else return num; }
Metod tipa void ima return naredbu bez definisane specifine vrednosti return; Na prvi pogled se ini da je ovaj pristup beskoristan, ali se u praksi void esto koristi. Dobar primer je metod kada je potrebno samo neto prikazati na ekranu. Kao se u okviru metoda tipa void ne navede naredba return, podrazumeva se da se ona izvrava na kraju metoda
SI1P1 2004
119/15
SI1P1 2004
120/15
30
Argumenti metoda
Argumenti metoda
Metodi mogu dobijati ulazne podatke u formi argumenata. Argumenti se koriste kao promenljive u okviru tela metoda. Kao promenljive, i argumentima se mora specificirati tip. Argumenti se definiu unutar zagrada koje se nalaze iza imena metoda.
Vie argumenata metoda se odvajaju zarezom: double pow(double x, double y) Argumenti mogu biti razliitog tipa int indexOf(String str, int fromIndex) Telo metoda je blok specificiran sa velikim zagradama, { }. U okviru tela metoda se definiu akcije metoda. Argumenti metoda se mogu koristiti bilo gde u okviru metoda. Svi metodi moraju imati velike zagrade bez obzira da li se telo metoda sastoji od jedne naredbe ili ak od nijedne.
122/15
SI1P1 2004
121/15
SI1P1 2004
Poziv metoda
main metod
Da bi se pozvao odreeni metod, potrebno je specificirati ime metoda, iza koga treba navesti listu argumenata odvojenih zarezom i u okviru zagrada pow(2, 10); //rauna 2 na 10 Ako metod nema argumenata, treba navesti ime metoda sa praznim zagradama: size(); Neki metodi mogu sadrati re static pre tipa metoda: static double divide(double a, double b) { return a / b; }
Do sada smo koristili jedino metod main Ovaj metod je taka odakle uvek poinje izvravanje Java programa main metod je static i ima strog format koji se mora potovati: public static void main(String[] args) { ... }
SI1P1 2004
123/15
SI1P1 2004
124/15
31
main metod
Primer
class SayHi{ public static void main(String[] args) { System.out.println("Hi, " + args[0]); } } Ako se otkuca java Program arg1 arg2 argN u okviru komandne linije, sve nakon imena klase se automatski uitava u niz pod imenom args: java SayHi Bosko U ovom primeru lan args[0] e sadravati String Bosko", i izlaz proma e biti "Hi, Bosko"
SI1P1 2004 125/15
ta nije u redu u sledeem delu programa static double addSometimes(num1, num2){ double sum; if (num1 < num2){ sum = num1 + num2; String completed = completed; return completed; } }
SI1P1 2004
126/15
Primer
Primer
class Greetings { public static void main(String args[]) { String greeting = ""; for (int i=0; i < args.length; i++) { greeting += "Jambo " + args[i] + "! "; } System.out.println(greeting); } } Nakon kompaliranja i pokretanja java Greetings Lana Pera Maja izlaz e biti "Jambo Lana! Jambo Pera! Jambo Maja!"
127/15
class Max { public static void main(String args[]) { if (args.length == 0) return; int max = Integer.parseInt(args[0]); for (int i=1; i < args.length; i++) { if (Integer.parseInt(args[i]) > max) { max = Integer.parseInt(args[i]); } } System.out.println(max); } } java Max 3 2 9 2 4 dobija se izlaz 9
128/15
SI1P1 2004
SI1P1 2004
32
Najvaniji pojmovi
Metod je odvojeni deo koda koji moemo pozivati i izvravati vie puta, a napisan je samo jednom Metodi u Javi imaju 4 dela: tip podatka koji vraaju, ime, argumente, telo. Tip podatka koji se vraa i argumenti mogu biti primitivni tip podataka (na primer int) ili sloeni (na primer Object) main je specijalni Java metod koji Java interpreter trai kada eli da pokrene class fajl main ima strog format: public static void main(String args[])
SI1P1 2004
129/15
SI1P1 2004
130/15
Tipove podataka: int, double, boolean, String Promenljive: Pamte vrednost odreenog tipa. Nizovi: Pamte vie vrednost odreenog tipa. Kontrolne strukture: If-then, For petlje ... Metodi: Delovi koda kojima moemo proslediti argumente i izvriti ih. Da li je to sve to nam je potrebno?
Neki podaci se pamte zajedno. String[] imena int[] ocene Metodi poinju da se komplikuju. Metodi mogu vratiti rezultat samo jednog tipa. Programeri ne ele da razmiljaju o svim neprikazanim tipovima.
SI1P1 2004
131/15
SI1P1 2004
132/15
33
Apstrakcija
ta je objekat
Objekti su alati za primenu apstrakcije. Pokuavamo apstraktovati odreene detalje da bi se suoili sa kompleksnim problemima. Apstrakcija je fundamentalni koncept u raunarskim naukama. Problem je i da se ne primenjuje suvie apstrakcije. Umee je znati oje detalje treba sakriti, a koje treba prikazati.
Objekat ima dva dela: Stanje: Osobine objekta. Ponaanje: Stvari koje objekat moe da uradi. Primer automobila: Stanje: Boja, vrsta motora, automatik Ponaanje: koiti, ubrzati, svirati, voziti u odreenom smeru Primer oovek: Stanje: Teina, visina, pol, godite Ponaanje: Jesti, spavati, vebati, uiti
SI1P1 2004
133/15
SI1P1 2004
134/15
ta je objekat
Modularnost: Jednom kada se objekat definie, moe se koristiti u proizvoljnom broju aplikacija. Sakrivanje informacija: programere ne zanima kako objekat funkcionie, ve samo njegov interfejs. Primer: Razliiti automobili mogu koristiti iste delove. Ne zanima vas kako motor funkcionie, sve dok moete da vozite automobil.
SI1P1 2004
135/15
SI1P1 2004
136/15
34
Klase
Klase
Klasa je uzorak ili kalup pomou koga se stvara objekat Svaka klasa moe sadrati: - lanove podataka (osobine/karakteristike objekta/klase) - Metode (definiu ponaanje objekata dobijenoh od klase) - Konstruktore (specijalne metode)
Osnovna anatomija klase public class imeKlase{ lanove podataka Konstruktori Metodi }
SI1P1 2004
137/15
SI1P1 2004
138/15
Klase
class prekidacZaSvetlo{ boolean upaljeno = true; } Re class govori okruenju da elimo da definiemo novi tip Object-a. Klase su definicije stanja i ponaanja. Objekti su instance klasa. Sve u okviru Jave je objekat i ima svoju klasu.
SI1P1 2004
139/15
SI1P1 2004
140/15
35
Definisanje ponaanja
class prekidacZaSvetlo{ boolean upaljeno = true; void pritisni() { this.upaljeno = !this.upaljeno ; } } Re this se odnosi na pojedinani objekat Pomou this.upaljeno se pristupa polju upaljeno. Koje ponaanje prekidacZaSvetlo sada moe imati?
SI1P1 2004
141/15
SI1P1 2004
142/15
Korienje objekata
Konstruktori
public static void main(String[] args) { prekidacZaSvetlo s = new prekidacZaSvetlo(); System.out.println(s.upaljeno); s.pritisni(); System.out.println(s.upaljeno); } Pomou new se kreira novi objekat. Iza new mora se navesti konstruktor. Metodi se pozivaju na sledei nain: imePromenljive.imeMetoda(argumenti) ta se dobija kao izlaz ovog programa?
143/15
Konstruktori povezuju objekte sa podacima koji su im potrebni da bi se inicijalizovali Objekti imaju default konstruktor koji nema nijedan argument, kao prekidacZaSvetlo(). Mogu se definisati sopstveni konstruktori koji mogu imati proizvoljan broj argumenata. Konstruktori nemaju tip povratka i moraju imati isto ime kao klasa: ImeKlase(definisanje argumenata) { telo konstruktora }
SI1P1 2004 144/15
SI1P1 2004
36
Konstruktori
Konstruktori
class prekidacZaSvetlo { boolean upaljeno ; void pritisni() { this.upaljeno = !this.upaljeno ; } prekidacZaSvetlo (boolean pocetnoStanje) { this.upaljeno = pocetnoStanje; } } Konstruktor prekidacZaSvetlo() vie ne postoji. Kako se sada pravi instanca objekta?
145/15
prekidacZaSvetlo() { prekidacZaSvetlo(true) ; } prekidacZaSvetlo (boolean pocetnoStanje) { this.upaljeno = pocetnoStanje; } } Moe se definisati vie konstruktora. Konstruktori se mogu meusobno pozivati.
SI1P1 2004
SI1P1 2004
146/15
prekidacZaSvetlo
class prekidacZaSvetlo{ boolean upaljeno = true; boolean daLiJeUpaljeno() { return upaljeno; } void pritisni() { upaljeno = !upaljeno; } }
class prekidacZaSvetlo{ int upaljeno = 1; boolean daLiJeUpaljeno() { return upaljeno == 1; } void pritisni() { upaljeno = 1 - upaljeno; } }
SI1P1 2004
147/15
SI1P1 2004
148/15
37
Apstrakcija
Problem apstrakcije
Obe prethodne verzije se imaju isto ponaanje. Klasu prekidacZaSvetlo treba tretirati kao apstrakciju: ne interesuje nas unutranjikod, ve samo njeno ponaanje Interni kod = implementacija Spoljanje ponaanje = interfejs Pisanje koda i poboljanje implementacije se moe ovbavljati sve dok je interfejs isti Sve dok je korisnjenje objekta date klase isto, ne zanima nas kako je dobijeno dato ponaanje. U velikim projektima, gde ima vie timova, programera jedino zanima njegov deo koda (na primer Microsoft, Google, Goldman Sachs, Morgan Stanley i finansijske kompanije)
149/15
Korisnik klase prekidacZaSvetlo koji pristupa logikoj promenljivoj upaljeno, grei ako se ova promenljiva promeni u celobrojnu class PrimerGreske{ public static void main(String[] args) { prekidacZaSvetlo ls= new prekidacZaSvetlo (); if (ls.upaljeno) // greska! System.out.println("upaljeno!"); else System.out.println(Nije upaljeno!"); } }
150/15
SI1P1 2004
SI1P1 2004
Ako se polja ili metodi oznae kao private, tada im druge klase ne mogu pristupiti Ako se polja ili metodi oznae kao public, tada im bilo koja druga klasa moe pristupiti Ako se ne specificira posebno da li je polje ili metod public ili private, tada se podrazumeva da je public.
SI1P1 2004
151/15
SI1P1 2004
152/15
38
Novi problemi
U prethodnom primeru polje upaljeno je definisano kao private class prekidacZaSvetlo{ private boolean upaljeno = true; Ako se iz druge klase pristupa ovom polju desie se greka pri kompajliranju if (ls.upaljeno) // greska
Promenljive i objekti
Postoje dve vrste podataka u Javi: promenljive i objekti Promenljive: byte, short, int, long, double, float, boolean, char == proverava da li dve promenljive imaju istu vrednost Objekti: definisani u okviru Java klasa == proverava da li su dva objekta isti objekat
SI1P1 2004
153/15
SI1P1 2004
154/15
Reference
Pomou new se uvek stvara nova jedinstvena instanca klase Kada se instanca povee sa odreenom promenljivom, tada promenljiva sadri referencu ili vezu sa datim objektom Covek g = new Covek(Lana", 3); Covek h = new Covek(Lana", 3); U ovom primeru g i h predstavljaju reference na dva razliita objekta koji u ovom trenutku imaju identina stanja
Reference
g != h se dobija, jer g i h predstavljaju reference na razliite objekte Covek g = new Covek(Lana", 3); Covek h = new Covek(Lana", 3);
Lana 3
SI1P1 2004 155/15 SI1P1 2004
Lana 3
156/15
39
Reference
maja1 == maja2 se dobija, jer maja1 i maja2 predstavljaju referencu na isti objekat Covek maja1 = new Covek(Maja", 34); Covek maja1 = maja2;
Pitanja
Da li je (a == b)? int a = 7; int b = 7; Odgovor: Da Da li je (g == h)? Person g = new Person(Mwangi", 21); Person h = new Person(Mwangi", 21); Odgovor: Ne
maja1
maja2
Maja 34
SI1P1 2004 157/15 SI1P1 2004 158/15
Pitanja
true ili false? Person g = new Person(James", 22); Person h = new Person("James", 22); Person lucy1 = new Person(Lucy", 19); Person lucy2 = lucy1; a) g == h b) g.getAge() == h.getAge() c) lucy1 == lucy2 d) lucy1.getAge() == lucy2.getAge();
Primer BankAccount
class BankAccount{ double balance; String name; BankAccount(String name, doubleopenBalance){ this.name = name; this.balance = openBalance; } double deposit(double amount) { balance += amount; return balance; } boolean withdraw(double amount) { if (amount < balance){ balance -= amount; return true; } else return false; } SI1P1 } 2004
SI1P1 2004
159/15
160/15
40
Java API
Sve informacije o ugraenim Java klasama i njihovim metodama se mogu dobiti pomou Java Application Programming Interface (API) Ova dokumentacija je osnov za realizaciju bilo koje sloene Java aplikacije
SI1P1 2004
161/15
SI1P1 2004
162/15
Primer
public class MyMath{ public double PI = 3.14159; public double square (double x) { return x * x; } public static void main(String[ ] args) { MyMath m = new MyMath(); System.out.println("m: value of PI is " + m.PI); System.out.println("m: square of 5 is " + m.square(5)); MyMath n = new MyMath(); System.out.println("n: value of PI is " + n.PI); System.out.println("n: square of 5 is " + n.square(5)); } }
SI1P1 2004 163/15
Analiza
SI1P1 2004
U prethodnom primeru, da bi se dobio kvadrat broja 5 potrebno je kreirati instancu klase MyMath: MyMath m = new MyMath(); Tada se poziva metod square() sa argumentom 5: m.square(5); Rezultat poziva metoda square() sa instancama m i n je isti: m: value of PI is 3.14159 m: square of 5 is 25 n: value of PI is 3.14159 n: square of 5 is 25 Metod square() se ponaa isto bez obzira koja ga instanca poziva
164/15
41
Analiza
MyMath - ponovo
public class MyMath{ // add keyword "static" to field declaration public static double PI = 3.14159; // add keyword "static" to method declaration public static double square (double x) { return x * x; } // main method is always declared "static" public static void main( String[ ] args) { // MyMath m = new MyMath(); // MyMath n = new MyMath(); -No longer need this line! // Now invoke square() method on the MyMathclass System.out.println("Valueof PI is " + MyMath.PI); System.out.println("Squareof 5 is" + MyMath.square(5)); } } 166/15 SI1P1 2004
Vrednost promenljive PI = 3.14159 je ista za sve instance klase MyMath. Zato je potrebno smestiti vrednost PI nezavisno za svaku instancu klase MyMath? Da li je mogue smestiti jednu vrednost promenljive PI za celu klasu MyMath?
SI1P1 2004
165/15
static PI
final
U prethodnom primeru je dodata re static kod deklaracije konstante PI: public staticdouble PI = 3.14159; Na taj nain je definisano da postoji samojedna vrednost promenljive PI za sve instance klase MyMathclass PI je sada podatak koji pripada klasi
Promenljiva PI je deklarisana sa public static double PI = 3.14159; I na ovaj nain je mogue promeniti njenu vrednost: MyMath.PI= 999999999; Da bi se definisala kao konstanta potrebno je koristiti re final: public static final double PI = 3.14159; Kada se jednom promenljiva deklarie kao final, njena vrednost se ne moe menjati!
SI1P1 2004
167/15
SI1P1 2004
168/15
42
final
Jo jedan primer upotrebe final public static final Point ORIGIN =new Point(0,0); Time smo zabranili promenu vrednosti promenljive na sledei nain: MyMath.ORIGIN= new Point(3, 4); ALI! I dalje se mogu pozivati metodi koji na nenki nain mogu promeniti stanje promenljive ORIGIN: MyMath.ORIGIN.setX(4);
SI1P1 2004
169/15
static metod
U primeru je dodata re "static" i pred deklaracije metoda square(): public static double square(doublex) { return x * x; } Sada je metod square() podeljen izmeu svih instanci ove klase postoji samo jedan square metod za celu klasu, ne jedan za svaku instancu
static metod
Statiki metodi ne vre operacije da specifinim instancama njihovih klasa Ovi metodi imaju pristup samo statikim poljima i metodama klase Ne mogu pristupiti nijednom elemntu koji je nestatiki Metodi klase" je bolja definicija Suprotni termin je metodi instance"
SI1P1 2004
171/15
SI1P1 2004
172/15
43
Math klasa
Detaljniji pregled klase Math u okviru Javinog API Ne moe se kreirati instanca klase Math, ona slui za smetanje korisnih static metoda Svi metodi i polja su static: Math.sqrt(16) Math.PI Math.abs(-3)
173/15
SI1P1 2004
SI1P1 2004
Pitanja
Da li sledei podaci treba da budu static ili nestatic? Podatak koji definie brzinu svetlosti getName() metod u okviru klase Person zbir() metod koji kao rezultat vraa zbir dva svoja argumenta Podatak koji definie irinu u okviru Rectangle klase static non static non
176/15
SI1P1 2004
175/15
SI1P1 2004
44
Pristup i organizacija
Na raunaru postoji hiljade fajlova. Na Internetu postoji vie miliona sajtova. Projekat moe imati hiljade klasa. Kako pronai odreenu klasu, fajl ili sajt? Kako organizujemo rad u sluaju istih ili slinih imena? Kako se moe ograniiti pristup privatnim podacima?
SI1P1 2004
177/15
SI1P1 2004
178/15
U ovoj lekciji
Oblast vaenja
Oblast vaenja: Odakle moemo pristupiti pojedinanim podacima. Kako se koriste Java paketi. Kako se kreiraju Java paketi.
Oblast vaenja promenljive, polja, metode ili klase je deo programa iz koga se moe pristupiti ovim elementima. Promenljivama se moe pristupiti iz bloka u okviru koga su deklarisane. Block se oznaava pomou { i }. Lokalne promenljive: Promenljive koje su definisane samo u trenutnom bloku. Pristup polju, metama i klasama je definisana pomou njihovih specifikatora.
SI1P1 2004
179/15
SI1P1 2004
180/15
45
Anonimne promenljive
Anonimne promenljive se deifiniu i inicijalizuju, ali se nikada ne deklariu. U jezicima C i C++ anonimne promenljive se tretiraju kao greka, u Javi ne. Ove promenljive nemaju ime i ne mogu se pozivati pa nemaju oblast vaenja. Primeri: System.out.println(Hello); (new String(Hello)) (new int[] {1,2,3,4}) (Poslednji primer sadri elemente koji e se razmatrati kasnije)
SI1P1 2004
181/15
SI1P1 2004
0 void foo(int x) { 1 int y = 3; 2 if (y > 0) { 3 int z= 4; 4 if (z> 0) { 5 int w= 0; 6 { 7 int v = 1; 8 } // end block 9 } // end if (z>0) 10 } // end if (y>0) 11 } // end Iz kojih linija koda se moe pristupiti promenljivama v, w, x, y, i z?
182/15
183/15
184/15
46
Pitanje
class TestScope { int x = 0; void foo() { int y = 20; x = 10; }// end foo void print() { int y = 0; System.out.println(x); foo(); System.out.println(x); System.out.println(y); }// end print() }// end Class TestScope ta se dobija na izlazu kao rezultat izvravanja programa? 0 10 SI1P1 2004 0
int sigma(int n) { for (int i = 0; i<n; i++) { int sum += i; } return sum; } Metod sigma bi trebalo da generie rezultat koji je jednak Zato se javlja greka pri kompajliranju?
SI1P1 2004
185/15
186/15
Pitanje 2
class TestScope { int x = 0; int y = 0; void foo() { int y; y = 20; x = 10; } void print() { System.out.println(x); foo(); System.out.println(x); System.out.println(y); } } ta se sada dobija na izlazu kao rezultat izvravanja programa? 0 10 0
187/15
Pitanje 3
class TestScope { int x = 0; int y = 0; void foo() { y = 20; x = 10; } void print() { System.out.println(x); foo(); System.out.println(x); System.out.println(y); } } ta se sada dobija na izlazu kao rezultat izvravanja programa? 0 10 SI1P1 2004 20
SI1P1 2004
188/15
47
Hijerarhijska organizacija
Imena su organizovana u hijerarhijski raspored. Bill Gates: Porodica: Gates, lan: Bill. rti.etf.bg.ac.yu 254-020-5555555: Kenya (254), Nairobi (020), Broj 5555555 java.lang.String: String je klasa, u okviru lang paketa, koji se nalazi u okviru osnovnog java paketa.
Veliki projekti mogu imati na hiljade klasa. Moete saraivati i deliti klase sa ljudima koji se nalaze irom sveta. Kako da budete sigurni da se ime vae klase nee poklopiti sa nekim imenom neke druge? Moete koristiti dugaka jedinstvena imena.. UtilityClassForPreparingTaxReturnsByAnthonyGfrom WestlandsNairobiKenya Ovakav nain je teak za pamenje i korienje.
SI1P1 2004
189/15
SI1P1 2004
190/15
Definicija paketa
Potrebno je organizovati klase u skupove ili delove programa koji se nazivaju paketi. Na ovaj nain se smanjuje problem konflikta imena i prepoznavanja funkcionalnosti, na primer java.util. Moe se ograniiti pristup na nivou paketa. Pripadnost klase paketu se definie sa: package imePaketa; class imeKlase{ /* Telo klase */ }
Paketi
Deklaracija paketa mora biti prva linija u fajlu koja nije komentar. Prva klasa definisan au okviru fajla mora da ima isto ime kao i ime fajla. Samo prva klasa moe biti tipa public. javac i java e traiti navedene poddirektorijume ili JAR (Java Archive) fajlove za navedeni kod: putanja \mypkg\util za paket mypkg.util (na Windows operativnom sistemu) putanja /mypkg/util/arrays za paket mypkg.util.arrays (na Unix operativnom sistemu)
SI1P1 2004
191/15
SI1P1 2004
192/15
48
Korienje paketa
Mogu se korisno definisati imena: java.util.Date d = new java.util.Date(); Ili specifirati klase koje se ele koristiti: import java.util.Date; import java.util.ArrayList; Mogu se koristiti sve klase iz paketa: import java.util.*; Paketi mogu imati pod-pakete: import java.util.logging.*; Default korieni paket: import java.lang.*;
193/15
Specifikatori pristupa
Polja, metode, konstruktori i klase koje su definisane kao public omoguavaju pristup iz bilo koje klase bilo kog paketa. Polja, metode, konstruktori i klase koje su definisane kao protected omoguavaju pristup samo klasama koje ih nasleuju. Polja, metode, konstruktori i klase koje su definisane sa paketnim pristupom omoguavaju pristup iz bilo koje klase istog paketa. Ovakav pristup se podrazumeva. Polja, metode i konstruktori koji su definisani kao private omoguavaju pristup samo kodi iz klase u kojoj se pojavljuju.
194/15
SI1P1 2004
SI1P1 2004
Primer
package examples; class Person { String name; //Telo klase ce se dopuniti: // Dodavanjem polja za rodjendan // Dodavanjem metoda za definisanje rodjendana // Dodavanjem metoda za citanje rodjendana }
SI1P1 2004
195/15
SI1P1 2004
196/15
49
Primer
package examples; class Person { String name; java.util.Date birthDay; void setBirthday(java.util.Date d) { this.birthDay = d; } java.util.Date getBirthday() { return this.birthDay; } }
Primer
package examples; import java.util.Date; class Person { String name; Date birthDay; void setBirthday(Date d) { this.birthDay = d; } Date getBirthday() { return this.birthDay; } }
197/15 SI1P1 2004 198/15
SI1P1 2004
Primer
package examples; import java.util.Date; import java.util.ArrayList; class Person { String name; ArrayList friends; Date birthDay; void setBirthday(Date d) { this.birthDay = d; } Date getBirthday() { return this.birthDay; } }
SI1P1 2004 199/15
Primer
package examples; import java.util.*; class Person { String name; ArrayList friends; Date birthDay; void setBirthday(Date d) { this.birthDay = d; } Date getBirthday() { return this.birthDay; } }
SI1P1 2004 200/15
50
Pojam nasleivanja
U stvarnom svetu: Mi nasleujemo svoje gene od roditelja. Nasleujemo gene i od drugih predaka. Moemo imati razliite oi, teinu, visinu . . . Ali i dalje veliki broj osobina nasleujemo od naih roditelja. U svetu softvera: Nasleivanje kod objekata je mnogo bolje definisano! Objekti koji nasleuju neke druge objekte, od njih nasleuju i stanja (polja) i ponaanje (metode).
201/15 SI1P1 2004 202/15
SI1P1 2004
Klasa Masai
public class Masai{ private String name; private int cows; public Masai(String n, int c) { name = n; cows = c; } public String getName() { return name; } public int getCows() { return cows; } public void speak() { System.out.println(Masai"); } }
SI1P1 2004 203/15
Klasa Kikuyu
public class Kikuyu { private String name; private int money; public Kikuyu(String n, int m) { name = n; money = m; } public String getName() { return name; } public int getMoney() { return money; } public void speak() { System.out.println(Kikuyu"); } }
SI1P1 2004 204/15
51
Primer
SI1P1 2004
Prethodne dve klase imaju isto polje name i isti metod getName Klase esto imaju veliki broj zajednikh polja i metoda Dobijeni rezultat: dupliranje koda! Koristei nasleivanje mogue je napisati novu klasu koja nasleuje neku ve postojeu Postojea klasa ije osobine nasleuju naziva se klasa roditelj" ili superklasa Nova klasa koja nasleuje superklasu naziva se klasa potomak" ili subklasa Rezultat: Velika uteda koda!
205/15
SI1P1 2004
206/15
Kenyan superklasa public class Kenyan { private String name; public Kenyan(Stringn) { name = n; } public String getName() { return name; } }
SI1P1 2004 207/15
Masai podklasa
public class Masai extends Kenyan{ private int cows; public Masai(String n, int c) { super(n); // poziv Kenyan konstruktor cows = c; } public int getCows() { return cows; } public void speak() { System.out.println(Masai"); } }
SI1P1 2004 208/15
52
Kikuyu podklasa
public class Kikuyu extends Kenyan{ private int money; public Kikuyu(String n, int m) { super(n); // poziv money = m;
Pitanje
Kenyan konstruktor
ta se dobija na izlazu? Masaid = new Masai(Johnson" 23); Kikuyu c = new Kikuyu(Sheila", 2200); System.out.println(d.getName() + " has " + d.getCows() + " cows"); System.out.println(c.getName() + " has " + c.getMoney() + " shillings"); Johnson has 23 cows Sheila has 2200 shillings
SI1P1 2004 210/15
Pravila nasleivanja
Konstruktor podklase
Koristi se slubena re extends da bi se naznailo koja klasa nasleuje koju klasu Podklasa nasleuje sva polja i sve metode superklase Koristi se slubena re super u okviru konstruktora podklasem da bi se pozvao kontruktor superklase
Prva stvar koju konstruktor podklase mora da uradi je da pozove konstruktor superklase Na ovaj nain se delovi koji pripadaju super klasi konstruiu pre delova koji su deo same podklase Ako se ne pozove konstruktor superklase pomou naredbe super i superklasa ima konstruktor bez argumenata, tada e se taj konstuktor pozati implicitno.
SI1P1 2004 212/15
SI1P1 2004
211/15
53
Primer
Ako je data klasa Food: public class Food { private boolean raw; public Food() { raw = true; } } I podklasa Beef: public class Beef extends Food { private double weight; public Beef(double w ) { weight = w } } 2004 SI1P1 Je ekvivalentno sa: public class Beef extends Food { private double weight; public Beef(double w) { super(); weight = w } }
Pitanje
public class A { public A() { System.out.println("I'm A"); } } public class B extends A { public B() { System.out.println("I'mB"); } } public class C extends B { public C() { System.out.println("I'mC"); } } ta e se pojaviti na ekranu nakon sledee naredbe? C x = new C(); I'm A I'm B I'm C
213/15 SI1P1 2004 214/15
Preklapanje metoda
Podklasa moe preklopiti odgovarajui metod svoje superklase
ta se dobija na izlazu nakon izvravanja sledeih naredbi? ThermUS thermometer = new ThermUS(100); System.out.println(thermometer.getTemp()); 212
SI1P1 2004 215/15 SI1P1 2004 216/15
54
Konverzija tipova
SI1P1 2004
217/15
SI1P1 2004
218/15
Primer
Kompanija ima listu Zaposlenih. Potrebno je napraviti stranicu za plaanje z asvakog zaposlenog. Na stranici se prikazuju opti podaci (ime, odeljenje, koliina plaanja, ) za sve zaposlene. Razliiti tipoi zaposenih menader, inenjerm sotverski inenjer Postoji stara verzija klase Employee ali je potrebno doti veoma razliite podatke i metode za menadere i inenjere. Neka je neko ukljuio staru Employee klasu u ssem. U okviroe klase postoji metod printData() za svaog zaposlenog i ovaj metod samo prikazuje ime zaposlnog. Potrebno je ovo promeniti, tako da se prikazuju i informacije o plaanju
Primer
SI1P1 2004
219/15
SI1P1 2004
220/15
55
Primer
class Employee { // Data private String firstName, lastName; // Constructor public Employee(String fName, String lName) {firstName= fName; lastName= lName;} // Method public void printData() {System.out.println(firstName+ " " + lastName);} }
Primer
SI1P1 2004
221/15
SI1P1 2004
222/15
Primer
class Engineer extends Employee { private double wage; private double hoursWorked; public Engineer(String fName, String lName, double rate, double hours){ super(fName, lName); wage = rate; hoursWorked= hours; } public double getPay() { return wage * hoursWorked;} public void printData() { super.printData(); // PRINT NAME System.out.println("Weeklypay: $" + getPay(); }}
Primer
SI1P1 2004
223/15
SI1P1 2004
class Manager extends Employee { private double salary; public Manager(String fName, String lName, double sal){ super(fName, lName); salary = sal; } public double getPay() { return salary; } public void printData() {super.printData(); System.out.println("Monthly salary: $" + salary);}}
224/15
56
Primer
Primer
class SalesManager extends Manager { private double bonus; // Bonus Possible as commission. // A SalesManagergets a constant salary of $1250.0 public SalesManager(StringfName, String lName, double b) { super(fName, lName, 1250.0); bonus = b; } public double getPay() {return 1250.0; } public void printData() {super.printData(); System.out.println("BonusPay: $" + bonus; } }
SI1P1 2004 225/15 SI1P1 2004 226/15
Primer
Klasa Object
SI1P1 2004
public class PayRoll{ public static void main(String[] args) { fred= new Engineer("Fred", "Smith", 12.0, 8.0); Manager ann= new Manager("Ann", "Brown", 1500.0); SalesManager mary= new SalesManager("Mary", "Kate", 2000.0); employees = new Employee[3]; employees[0]= fred; employees[1]= ann; employees[2]= mary; for (int i=0; i < 3; i++) employees[i].printData(); } }
Sve Javine klase implicitno nasleuju klasu java.lang.Object Tako da svaka klasa koja se napie automatski ima neke metode koji pripadaju klasi Object, kao o su equals, hashCode, i toString. Neki od ovih metoda e se obraivati u kasnijim lekcijama
227/15
SI1P1 2004
228/15
57
U ovoj lekciji
ta predstavlja izuzetak Uobiajena terminologija Zato koristiti izuzetke Kako se deava izuzetak Kako se obrauje izuzetak O izuzecima koji se moraju obraditi i o onima koji se ne moraju Primeri Java izuzetaka Kako napisati svoj sopstveni izuzetak
229/15 SI1P1 2004 230/15
SI1P1 2004
ta predstavlja izuzetak?
Terminologija
Izuzetak je dogaaj koji se dogodio tokom izvravanja programa i moe da prouzrokuje prekid normalnog toka izvravanja instrukcija Mogui razlozi izuzetaka: Pristup elementu izvan granica niza Pokuaj upisa u read-only dokument Pokuaj itanja nakon kraja dokumenta Slanje nelegalnih argumenata nekom metodu Nelegalne aritmetike operacije (n.p. deljenje sa 0) Otkaz hardverskih resursa
Kada se izuzetak (exception) dogodi koristi se izraz da je baen izuzetak (throw) Kada se izvre odreene operacije sa izuzetkom kae se da je izuzetak obraen (handled) Deo koda pomou koga se izvre odreene operacije sa izuzetkom naziva se obrada izuzetaka (exception handler)
SI1P1 2004
231/15
SI1P1 2004
232/15
58
Pomou kompajliranja ne mogu se odrediti sve greke Na ovaj nain se odvaja kod za obradu izuzetaka od ostalog, regularnog koda
Jasnoa i razumljivost koda (debagovanje, timski rad, ...) Obrada izuzetaka se izvrava samo na jednom mestu
Odvojeni su delovi koda za prepoznavanje greke, izvetavanje i obradu Mogu se grupisati i odvojiti razliiti tipovi greaka Mogu se obraditi greke koje prouzrokuju veoma specifine izuzetke
public class ArrayExceptionExample{ public static void main(String args[]) { String[] names = {Bilha", Robert"}; System.out.println(names[2]); } } Naredba println u navedenom kodu e dovesti do greke i sledee poruke pri obradi datog izuzetka: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 at ArrayExceptionExample.main(ArrayExceptionExample.j ava:4)
SI1P1 2004 234/15
SI1P1 2004
233/15
Primeri
SI1P1 2004
235/15
SI1P1 2004
Poruka kod izuzetka u primeru sa nizovima java.lang.ArrayIndexOutOfBoundsException: 2 at ArrayExceptionExample.main(ArrayExceptionExample.j ava:4) Koja je klasa izuzetka? java.lang.ArrayIndexOutOfBoundsException Kom indeksu niza se pristupa, a on je izvan granica? 2 Koji metod generie izuzetak? ArrayExceptionExample.main Koji fajl sadri ovaj metod? ArrayExceptionExample.java Koja linija fajla generie izuzetak? 4
236/15
59
Generisanje izuzetaka
Obrada izuzetaka
Svi metodi mogu koriste naredbu throw da bi prihvatili izuzetak if (student.equals(null)) throw new NullPointerException(); Naredba throw zahteva poseban argument: throwable objekat Ova vrsta objekata je instanca bilo koje podklase Throwable klase Ova klasa obuhvata sve tipove greaka i izuzetaka U okviru opisa API mogu se pronai i opisi svih throwable objekata
237/15
Moe se koristiti try-catch blok da bi se obradio izuzetak koji se desio try{ // kod u okviru koga moe da se desi izuzetak } catch([Tip izuzetka] e) { // ta da se izvri ako se desio izuzetak }
SI1P1 2004
SI1P1 2004
238/15
finally blok
Moe se koristiti opcioni finally blok na kraju try-catch bloka finally blok obezbeuje mehanizam da regulie sve to se deilo u okviru try bloka Moe se iskoristiti za zatvranje fajla ili oslobaanja nekog drugog resursa Try-Catch-Finally Blok
Vie moguih izuzetaka se moe istovremeno obraditi pomou vie sukcesivnih catch blokova try{ // kod u okviru koga moe da se desi vie izuzetaka } catch (IOException e) { // obrada IOException } catch (ClassNotFoundException e2) { // obrada ClassNotFoundException }
239/15
try{ // kod u okviru koga moe da se desi izuzetak } catch([Type of Exception] e) { // ta da se izvri ako se desio izuzetak } finally{ // naredbe u okviru bloka e se uvek izvriti // bez obzira ta e se dogoditi u okviru bloka }
SI1P1 2004 240/15
SI1P1 2004
60
Izuzeci koji se ne mogu proveravati (unchecked exceptions) ili runtime izuzeci se pojavljuju u okviru Java runtime sistema Primeri ovih izuzetaka Aritmetike operacije (deljenje sa nulom) pointer exceptions (pokuaj da se pristupi lanu objekta pomou null reference) Izuzeci sa indeksima (pokuaj da se pristupi elementu niza sa indeksom koji je preveliki ili premali) Metod koji ne sadri catch ili specificira da moe da generie unchecked exceptions, takoe moe u nekim sluajevima ih generisati
241/15
SI1P1 2004
SI1P1 2004
242/15
Hijerarhija klasa
243/15
SI1P1 2004
244/15
61
Nasleivanje i izuzeci
Metod moe specificirati manje izuzetaka, ali ne vie od metoda koji nasleuje public class MyClass { public void doSomething() throws IOException, SQLException { // do something here } } public class MySubclass extends MyClass { public void doSomething() throws IOException { // do something here } }
SI1P1 2004
245/15
SI1P1 2004
246/15
SI1P1 2004
248/15
62
Sadraj lekcije
Izuzeci naruavaju normalno izvravanje instrukcija u okviru programa Izuzeci se obrauju pomou try-catch ili try-catchfinally bloka Metod specificira postojanje izuzetka pomou throw naredbe Metod koji nema catch deo ili ne specificira da postoji unchecked izuzetak, moe da ga generie Svaki metod mora obraditi checked izuzetke ili specificirati da postoje Ako se pie spostveni izuzetak, on mora biti podklasa klase Exception i imati najmanje dva standardna konstruktora
249/15 SI1P1 2004
SI1P1 2004
250/15
U ovoj lekciji
Osnove ulaz/izlaz
Lekcija je podeljena u dva glavna dela: I Ulaz/Izlaz: Ulaz ili Izlaz, i Byte ili Character nizovi Najvanije Stream klase i njihova upotreba Primeri itanja iz i upisa u tekstualni fajl Primeri prihvatanja teksta sa tastature Upotreba bafera II Uvod u postupak parsiranja: Delimiteri StringTokenizer
I/O = Input/Output ulaz/izlaz komunikacija izmeu raunarskog programa i spoljanjih izvora informacija Ukljuuje: - itanje ulaznih podataka iz izvora Upis rezultata u krajnje odredite itanje i upis su specifirani pomou 4 abstraktne klase:
Reader Writer InputStream OutputStream
SI1P1 2004
251/15
SI1P1 2004
252/15
63
Java programi komuniciraju sa spoljanjim svetom pomou Streams Streams se koriste za itanje i upis podataka I/O Streams su jednodirekcioni Ulazni (Input) stream se koristi za ulazne podatke u program Izlazni (output) stream se koristi za podatke koji predstavljaju rezultat izvravanja programa Izvor i odredite podataka mogu biti: fajlovi, mrene konekcije, drugi programi, ...
SI1P1 2004
253/15
SI1P1 2004
Byte i Character
Byte Streams se koristi da bi se itali i upisivali podaci koji su u binarnom formatu (1 ili 0) Na primer slike, zvuk, ... Character Streams se koristi da bi se itali i upisivali podaci koji su u tekstualnom formatu (karakteri)
Na primer tekstualni fajlovi, web stranice, unos korisnika pomou tastature, ...
FileInputStream
SI1P1 2004
255/15
SI1P1 2004
256/15
64
1. Otvaranje streama instanciranjem novog stream objekta 2. Rad sa informacijama pomou read/write, read/write u okviru metoda Stream klasa 3. Zatvaranje streama pozivom close() metoda datog objekta
Paket java.io sadri klase koje s ekoriste za itanje/upis podataka iz/u fajlove Da bi se itali/upisivali podaci, moraju se intancirati podklase jedne od sledee 4 abstraktne superklase:
SI1P1 2004
257/15
SI1P1 2004
258/15
Klasa Reader se koristi za itanje karaktera ulaznog streama Ova klasa sari metode za itanje pojedinanog karaktera i niza karaktera, na primer int read() Klasa Reader je apstraktna, tako da se mora instancirati u podklasi koja mora preklopiti ove metode
SI1P1 2004
259/15
SI1P1 2004
260/15
65
BufferedReader klasa
BufferedReader je podklasa klase Reader Skuplja (buffers) karakter stream iz FileReader i sadri metod readLine() za efikasno itanje ulazne linije karaktera FileReader fr = new FileReader("myFile.txt"); BufferedReader br= new BufferedReader(fr); Merod readLine() kao rezultat vraa vrednost null ako nema vie linija za itanje
SI1P1 2004
261/15
SI1P1 2004
262/15
Klasa Writer
Klasa Writer je apstraktna klasa koja se koristi upis karakter stream-ova Ova klasa sadri metode za upis pojedinanog karaktera i stringova Na primer void write(int c) BufferedWriter (podklasa klase Writer) sadri metode za efikasni upis Metodom newLine() se upisuje prazna linija, a metodom write(String n) se upisuju konkretni podaci Kada se zavri eljena operacija potrebno je zatvoriti Write pomou metoda close()
263/15 SI1P1 2004 264/15
SI1P1 2004
66
Kopiranje fajlova
SI1P1 2004
265/15
SI1P1 2004
266/15
Zakljuak
Potrebno je prouiti hijerarhiju klasa InputStream i OutputStream, kao i Reader i Writer u okviru Java dokumentacije da bi se uoile sve postojee podklase i metodi koji se mogu koristiti Treba koristiti Java API!!!
SI1P1 2004
267/15
SI1P1 2004
268/15
67
Parsiranje
Delimiteri
Kada su podaci smeteni u tekstualnom formatu, delimiter karakteri se koriste da bi se odvojili delovi (tokens) podataka Na primer pojedinana imena u listi su odvojena pomou delimitera '#': Lana#Pera#Maja#Mika Ista lista sa delimiterom novom linijom: Lana Pera Maja Mika Ostali delimiteri koji se koriste su | ili : ili tab
270/15
U okviru programa podaci se obino konvertuju u tekstualni format pre nego to se upiu u fajlove Kasnije je potrebno upisane podatke iz tekstualnih fajlova konvertovati u originalne podatke Proces dekodovanje teksta u podatke se jo naziva i parsiranje
SI1P1 2004
StringTokenizer
Kada se pokuava proitati nova ulazna linija, kao rezultat se dobija jedan, u optem sluaju dugaki string. Potrebno je pronai delimitere u okviru tog stringa i odvojiti svaki pojedinani deo informacije (tokens) Da bi se obavila ova operacija koristi se klasa StringTokenizer u okviru paketa java.util
StringTokenizer
Kada se formira tokenizer objekat, potrebno je specificirati koji se karakteri koriste kao delimiteri u konkretnom sluaju Default konstruktori pretpostavljaju da su \t\n\r delimiteri StringTokenizerr = new StringTokenizer(line); Drugi konstruktori prihvataju kao argument String koji moe definisati proizvoljan niz karaktera kao delimiter
SI1P1 2004
271/15
SI1P1 2004
String line = myFile.readline(); StringTokenizert = new StringTokenizer(line, #); StringTokenizers = new StringTokenizer(line, ,\&\|);
272/15
68
StringTokenizer
Korisni StringTokenizer metoda: Metod nextToken() u formi stringa kao rezultat vraa sledei podatak izmeu delimitera u okviru teksta Metod hasMoreTokens() u formi boolean vraa rezultat true ako se u tekstu nalazi jo tokena
StringTokenizer
SI1P1 2004
273/15
SI1P1 2004
274/15
Parsiranje brojeva
esto je potrebno parsirati brojeve smetene kao tekst u okviru Java promenljivih Klase koje sadre statike metode za razne konverzije su int Integer.parseInt(Strings) double Double.parseDouble(Strings) Potrebno je obraditi izuzetak NumberFormatException ako se specificirani String ne moe konvertovati u okviru promenljive
SI1P1 2004
275/15
69