Uvod u programski jezik Java - alas.math.rsalas.math.rs/~mi13283/systempro/skripte/java.pdf · Uvod...

21
Uvod u programski jezik Java ˇ Skola raˇ cunara SystemPro Nemanja Mi´ covi´ c [email protected] oktobar 2016 1

Transcript of Uvod u programski jezik Java - alas.math.rsalas.math.rs/~mi13283/systempro/skripte/java.pdf · Uvod...

Page 1: Uvod u programski jezik Java - alas.math.rsalas.math.rs/~mi13283/systempro/skripte/java.pdf · Uvod u programski jezik Java ˇSkolaraˇcunara SystemPro NemanjaMi´covi´c nmicovic@outlook.com

Uvod u programski jezik JavaSkola racunara SystemPro

Nemanja [email protected]

oktobar 2016

1

Page 2: Uvod u programski jezik Java - alas.math.rsalas.math.rs/~mi13283/systempro/skripte/java.pdf · Uvod u programski jezik Java ˇSkolaraˇcunara SystemPro NemanjaMi´covi´c nmicovic@outlook.com

Sadrzaj1 O programskom jeziku Java 4

1.1 Principi na kojima je zasnovan . . . . . . . . . . . . . . . . . . . 41.2 Prevodenje Java koda . . . . . . . . . . . . . . . . . . . . . . . . 41.3 Java virtuelna masina . . . . . . . . . . . . . . . . . . . . . . . . 4

2 Tipovi podataka 42.1 Primitivni tipovi podataka . . . . . . . . . . . . . . . . . . . . . . 52.2 Klasni tipovi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

3 String 63.1 Osnovni primeri . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

3.1.1 Naredba dodele . . . . . . . . . . . . . . . . . . . . . . . . 63.1.2 Pristup i-tom karakteru . . . . . . . . . . . . . . . . . . . 63.1.3 Duzina stringa . . . . . . . . . . . . . . . . . . . . . . . . 73.1.4 Poredenje stringova . . . . . . . . . . . . . . . . . . . . . 73.1.5 Prebacivanje velicine slova . . . . . . . . . . . . . . . . . . 73.1.6 Iteriranje kroz String . . . . . . . . . . . . . . . . . . . . 7

3.2 Zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

4 Ulaz i izlaz 84.1 Opis metoda za izlaz . . . . . . . . . . . . . . . . . . . . . . . . . 84.2 Primer upotrebe metoda print i println . . . . . . . . . . . . . 94.3 Formatiranje izlaza . . . . . . . . . . . . . . . . . . . . . . . . . . 94.4 Citanje sa standardnog ulaza koristeci Scanner . . . . . . . . . . 94.5 Kompletan primer upotrebe klase Scanner . . . . . . . . . . . . . 104.6 Zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

5 Kontrola toka programa 125.1 if-elseif-else grananje . . . . . . . . . . . . . . . . . . . . . . 125.2 while petlja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135.3 for petlja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

6 Nizovi 136.1 Duzina niza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136.2 Primer unosa niza . . . . . . . . . . . . . . . . . . . . . . . . . . 146.3 Funkcija koja ispisuje niz . . . . . . . . . . . . . . . . . . . . . . 146.4 Primer koji ispisuje niz obrnuto . . . . . . . . . . . . . . . . . . . 15

7 Rad sa datotekama 167.1 Citanje iz datoteke . . . . . . . . . . . . . . . . . . . . . . . . . . 167.2 Pisanje u datoteku . . . . . . . . . . . . . . . . . . . . . . . . . . 16

8 Objektno orijentisano programiranje 168.1 Objektni deo Jave . . . . . . . . . . . . . . . . . . . . . . . . . . 168.2 Nasa prva klasa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

8.2.1 Konstruktori . . . . . . . . . . . . . . . . . . . . . . . . . 198.2.2 Polja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198.2.3 Metodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198.2.4 Metod toString() . . . . . . . . . . . . . . . . . . . . . . 20

2

Page 3: Uvod u programski jezik Java - alas.math.rsalas.math.rs/~mi13283/systempro/skripte/java.pdf · Uvod u programski jezik Java ˇSkolaraˇcunara SystemPro NemanjaMi´covi´c nmicovic@outlook.com

8.3 Nasledivanje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208.4 Polimorfizam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

Literatura 21

3

Page 4: Uvod u programski jezik Java - alas.math.rsalas.math.rs/~mi13283/systempro/skripte/java.pdf · Uvod u programski jezik Java ˇSkolaraˇcunara SystemPro NemanjaMi´covi´c nmicovic@outlook.com

1 O programskom jeziku JavaJava je objektno orijentisan programski jezik koji je napravila kompanija Sun

Microsystems oko 1995. godine. Java danas predstavlja jedan od najkoriscenijihi najpopularnijih programskih jezika. Veliku primenu jezik je pronasao i u pro-gramiranju za Veb gde se cesto koristi kao implementacioni jezik na serverima.Takode, kompanija Google je izabrala Javu kao implementacioni jezik za An-droid aplikacije.

1.1 Principi na kojima je zasnovanJezik je napravljen sa sledecim principima u vidu:

• Mora biti jednostavan, objektno orijentisan i poznat

• Mora biti robustan i siguran

• Mora biti nezavistan u odnosu na arhitekturu i mora biti portabilan

• Dobijeni kod mora biti visokih performansi

• Mora biti dinamican, interpretiran i podrzavati niti

1.2 Prevodenje Java kodaSlika 1 prikazuje kako izgleda proces prevodenja izvornog Java koda u

masinski kod koji procesor moze da izvrsi. Najpre treba uociti da se Java kod(blok 1) najpre prosleduje Java kompilatoru (program koji se zove javac) kojigenerise Java bajtkod (blokovi 1, 2 i 3).

Dobijeni bajt kod se potom salje Java virtuelnoj masini (JVM) koja gaizvrsava na odgovarajucem operativnom sistemu.

Uvodenje Java bajt koda kao medusloj omogucava da se isti Java programizvrsi na vise razlicitih operativnih sistema. Jedino sto je potrebno kako bi ovofunkcionisalo je da postoji Java virtuelna masina za ciljani operativni sistem.

1.3 Java virtuelna masinaJava virtuelna masina je program koji zna da izvsava Java bajt kod. Treba

ga zamisljati kao neku vrstu virtuelnog racunara, no da ne bude konfuzije, Javavirtuelna masina (eng. Java Virtual Machine - JVM) je program koji se instalirana racunaru i koji ce izvrsavati java kod.

2 Tipovi podatakaU javi postoje dve vrste tipova podataka, primitivni tipovi i klasni tipovi.

Razvijaocu programa se omogucava da uvede svoje tipove podataka tako stodefinise nove klase. Vise o klasama i objektno-orijentisanog programiranju bicekasnije reci.

4

Page 5: Uvod u programski jezik Java - alas.math.rsalas.math.rs/~mi13283/systempro/skripte/java.pdf · Uvod u programski jezik Java ˇSkolaraˇcunara SystemPro NemanjaMi´covi´c nmicovic@outlook.com

Slika 1: Prevodenje Java koda

2.1 Primitivni tipovi podatakaU javi postoji vise primitivnih tipova podataka. Pod primitivnim se misli

na to da nisu u pitanju klase vec prosti podaci. Na primer ceo broj sa tipomint je 32 bitni binarni broj.

Tabela 1: Primitivni tipovi u JaviIme podatka Opis Broj bitova Podrazumevana vrednostboolean Logicka vrednost 1 falsebyte Obican bajt 8 0char Unicode karakter 16 '\u0000'short Celi broj 16 0int Celi broj 32 0long Celi broj 64 0float Realni broj 32 00fdouble Realni broj 64 00d

Osim toga, java poseduje tip String koji je nesto izmedu primitivnog iklasnog tipa. Naime, String se ponasa kao klasni tip (mozemo nad njim pozivatimetode), ali se ipak dozvoljavaju neke naredbe poput naredbe ispod sto inacenije slucaj sa klasama i objektima.

String primer = "Zdravo svete";

Vise o klasi String u delu 3.

5

Page 6: Uvod u programski jezik Java - alas.math.rsalas.math.rs/~mi13283/systempro/skripte/java.pdf · Uvod u programski jezik Java ˇSkolaraˇcunara SystemPro NemanjaMi´covi´c nmicovic@outlook.com

2.2 Klasni tipoviJava je objektno-orijentisani programski jezik tako da podrzava koncepte

OOP-a poput:

• nasledivanja;

• polimorfizma;

• enkapsulacije.

Vise o klasama i njihovom definisanju u kasnijem delu o objektno-orijentisanom programiranju.

3 StringKlasa String predstavlja tip podatka koji se koristi za reprezentaciju teksta.

3.1 Osnovni primeriSlede neki osnovni primer oko rada sa klasom String.

3.1.1 Naredba dodele

Sledi primer koji prikazuje kako mozemo da napravimo promenljivu tipaString, dodeliti joj vrednost, napraviti novi String od postojeceg itd.

String primer; // deklarisemo promenljivu tipa Stringprimer = "Zdravo"; // dodeljujemo vrednost promenljivojprimer += " "; // na postojeci string dodajemo novi stringprimer += "svete!"; // isto kao: primer = primer + "svete";System.out.println(primer); // na standardni izlaz ispisujemo vrednost

Pokretanje koda daje sledeci izlaz:

> Zdravo svete!

3.1.2 Pristup i-tom karakteru

Ukoliko zelimo da pristupimo i-tom karakteru unutar String-a (sto je karak-ter), to mozemo uraditi koristeci metod charAt.

String primer = "Zdravo"; // dodeljujemo vrednost promenljivojSystem.out.println(primer.charAt(0)); // karakter na poziciji 0System.out.println(primer.charAt(5)); // karakter na poziciji 5

> Z> o

6

Page 7: Uvod u programski jezik Java - alas.math.rsalas.math.rs/~mi13283/systempro/skripte/java.pdf · Uvod u programski jezik Java ˇSkolaraˇcunara SystemPro NemanjaMi´covi´c nmicovic@outlook.com

3.1.3 Duzina stringa

Duzinu stringa mozemo dobiti pozivajuci metod length() nad stringom cijuduzinu zelimo.

String primer = "Zdravo";int duzina = primer.length(); // metod koji vraca duzinu stringaSystem.out.println(duzina); // ispisujemo duzinu stringa

> 6

3.1.4 Poredenje stringova

Stringove poredimo koristeci metod equals.

String a = "test";String b = "test";if (a.equals(b))

System.out.println("Jesu jednaki.");else

System.out.println("Nisu jednaki.");

> Jesu jednaki.

3.1.5 Prebacivanje velicine slova

Ukoliko zelimo da mala slova prebacimo u velika i obrnuto, mozemo koristitimetode toUpperCase() i toLowerCase().

String a = "test";String b = "TEST";System.out.println(a.toUpperCase());System.out.println(b.toLowerCase());

> TEST> test

3.1.6 Iteriranje kroz String

Nekada je potrebno da iteriramo kroz String element po element. Tomozemo uciniti koristeci for petlju.

String str = "Hello";for (int i = 0; i < str.length(); i++)

System.out.println(str.charAt(i));

> H> e> l> l> o

7

Page 8: Uvod u programski jezik Java - alas.math.rsalas.math.rs/~mi13283/systempro/skripte/java.pdf · Uvod u programski jezik Java ˇSkolaraˇcunara SystemPro NemanjaMi´covi´c nmicovic@outlook.com

3.2 ZadaciZadatak 3.1 Napisati funkciju ispisiObrnuto(String str) koja na stan-dardni izlaz ispisuje karakter po karakter stringa str u obrnutom poretku.

Zdravo test Anavolimilovana> ovardZ > tset > anavolimilovanA

Zadatak 3.2 Napisati funkciju pretvoriMala(String txt) koja svako slovostringa txt pretvara u malo. Sa standardnog ulaza uneti jednu liniju teksta,proslediti je funkciji pretvoriMala i na standardni izlaz ispisati rezultat radaprograma.

Zdravo svete MALA SLOVA SaDa jE 21:34.> zdravo svete > mala slova > sada je 21:34.

Zadatak 3.3 Napisati funkciju prebrojCifre(String str) koja vraca brojpojavljivanja karaktera cifara. Sa standardnog ulaza uneti jednu liniju teksta,proslediti je funkciji prebrojCifre i na standardni izlaz ispisati rezultat radaprograma.

Neke 123 reci Hello 123test123> 3 > 0 > 6

Zadatak 3.4 Napisati funkciju prebrojKarakter(String str, Char ch)koja prebrojava koliko puta se karakter ch pojavljuje u stringu str. Sastandardnog ulaza uneti string, a potom i karakter koje treba proslediti funkcijiprebrojKarakter i na standardni izlaz ispisati rezultat rada programa.

Teeeeest aab11 Zdravo123Svetee 1 $> 5 > 2 > 0

Zadatak 3.5 Sa standardnog ulaza se unose stringovi u beskonacnoj petlji.Ukoliko je unet string koji je razlicit od "quit", na standardni izlaz treba is-pisati uneti string transformisan u mala slova. Ukoliko je unet string "quit"treba izaci iz programa.

HELLO quit test> hello > > testTeSt AAA> test > aaaquit quit> >

4 Ulaz i izlazZa rad sa ulazom i izlazom (o fajlovima ce biti reci u delu 7) cemo koristiti

System.out.print i System.out.println metode.

4.1 Opis metoda za izlazMetodi System.out.print i System.out.println ispisuju svoje argumente

na standardni izlaz. Metod print ispisuje bez novog reda, a metod printlnnakon ispisa dodaje novi red.

8

Page 9: Uvod u programski jezik Java - alas.math.rsalas.math.rs/~mi13283/systempro/skripte/java.pdf · Uvod u programski jezik Java ˇSkolaraˇcunara SystemPro NemanjaMi´covi´c nmicovic@outlook.com

4.2 Primer upotrebe metoda print i printlnint a = 10;float b = 3.3f;char c = 'x';String d = "str";bool e = true;System.out.print(a);System.out.print(" ");System.out.print(b);System.out.print(" ");System.out.println(c);System.out.println(d);System.out.println(e);

> 10 3.3 x> str> true

4.3 Formatiranje izlazaUkoliko zelimo da napravimo lepo formatiran izlaz poput "kvadrat(2) = 4"

mozemo to uciniti koriscenjem operatora + koji vrsi konverziju svih tipova u tipString kada je barem jedan operand tipa String.

// (2*2) ce naterati javu da prvo izracuna izraz pa da ga onda prebaci u stringSystem.out.println("kvadrat(" + 2 + ") = " + (2*2));

int x = 2;System.out.println("kvadrat(" + x + ") = " + (2*2));

int a = 2, b = 2*2;System.out.println("kvadrat(" + a + ") = " + b);

> kvadrat(2) = 4> kvadrat(2) = 4> kvadrat(2) = 4

4.4 Citanje sa standardnog ulaza koristeci ScannerJava poseduje klasu Scanner koja se nalazi u java.util.Scanner. Ukoliko

zelimo da koristimo klasu Scanner potrebno je da dodamo naredbu:

import java.util.Scanner;

Objekat klase Scanner pravimo kao i svaki drugi objekat, odnosno:

Scanner sc = new Scanner(System.in);

Pri cemu:

• Scanner predstavlja ime klase

• sc predstavlja ime promenljive koji je instanca klase Scanner

9

Page 10: Uvod u programski jezik Java - alas.math.rsalas.math.rs/~mi13283/systempro/skripte/java.pdf · Uvod u programski jezik Java ˇSkolaraˇcunara SystemPro NemanjaMi´covi´c nmicovic@outlook.com

• new Scanner(...) predstavlja poziv konstruktoru klase Scanner

• System.in govori klasi Scanner da ulaz cita sa standardnog ulaza

Klasa Scanner poseduje neke od metoda koji su prikazani u tabelama 2 i 3.

Tabela 2: Neki od metoda klase Scanner za citanjepotpis metoda povratna vrednost opisnext() String vraca recnextLine() String vraca liniju tekstanextInt() int vraca celobrojnu vrednostnextFloat() float vraca realnu vrednostnextDouble() double vraca realnu vrednostnextBoolean() bool vraca logicku vrednost

Tabela 3: Neki od metoda klase Scanner za ispitivanje citanjapotpis metoda povratna vrednost opishasNext() bool vraca true ako je na ulazu odgovarajuci podatakhasNextLine() bool vraca true ako je na ulazu odgovarajuci podatakhasNextInt() bool vraca true ako je na ulazu odgovarajuci podatakhasNextFloat() bool vraca true ako je na ulazu odgovarajuci podatakhasNextDouble() bool vraca true ako je na ulazu odgovarajuci podatakhasNextBoolean() bool vraca true ako je na ulazu odgovarajuci podatak

4.5 Kompletan primer upotrebe klase Scanner

Sledeci kod ilustruje kako sa standardnog ulaza mozemo procitati dva celabroja na na standardni izlaz ispisati njihov zbir.

import java.util.Scanner;

public class StringPrimeri {public static void main(String[] args) {

Scanner sc = new Scanner(System.in);int x = sc.nextInt();int y = sc.nextInt();System.out.println("Zbir: " + (x+y));

}}

> 5> 10> Zbir: 15

Sta se desava kada korisnik unese nesto sto nije celi broj?

10

Page 11: Uvod u programski jezik Java - alas.math.rsalas.math.rs/~mi13283/systempro/skripte/java.pdf · Uvod u programski jezik Java ˇSkolaraˇcunara SystemPro NemanjaMi´covi´c nmicovic@outlook.com

> ovoNijeBroj> Exception in thread "main" java.util.InputMismatchException> at java.util.Scanner.throwFor(Scanner.java:864)> at java.util.Scanner.next(Scanner.java:1485)> at java.util.Scanner.nextInt(Scanner.java:2117)> ...

Java izbacuje izuzetak. Izuzecima ce biti posvecena paznja nesto kasnije.Kako bismo izbegli ovako nezeljeno ponasanje programa, mozemo koristiti funk-cije iz tabele 3 poput hasNextInt().

import java.util.Scanner;

public class StringPrimeri {public static void main(String[] args) {

Scanner sc = new Scanner(System.in);// dodeljujemo neke inicijalne vrednostiint x = 0, y = 0;// proveravamo da li postoji podatak tipa int na standardnom ulazuif (sc.hasNextInt())

x = sc.nextInt(); // ako postoji, citamo gaelse {

// inace, prijavljujemo gresku i izlazimo iz programaSystem.out.println("Unesite ceo broj.");System.exit(0);

}if (sc.hasNextInt())

y = sc.nextInt();else {

System.out.println("Unesite ceo broj.");System.exit(0);

}System.out.println("Zbir: " + (x+y));

}}

Sta se desava kada korisnik unese neadekvatan ulaz?

test 5.5> Unesite ceo broj. > Unesite ceo broj.> Process finished with exit code 0. > Process finished with exit code 0.

4.6 ZadaciZadatak 4.1 Napisati program koji sa standardnog ulaza unosi dva realna brojatipa double koji se zovu x i y. Na standardni izlaz ispisati vrednost xy. Do-zvoljeno je koristiti funkciju pow(double x, double y) koja se nalazi u klasiMath.

2 100 1 -23 0 1000.11 2> 8 > 1 > 1 > 4

11

Page 12: Uvod u programski jezik Java - alas.math.rsalas.math.rs/~mi13283/systempro/skripte/java.pdf · Uvod u programski jezik Java ˇSkolaraˇcunara SystemPro NemanjaMi´covi´c nmicovic@outlook.com

Zadatak 4.2 Napisati program koji sa standardnog ulaza unosi realan broj tipadouble koji se zove x. Na standardni izlaz ispisati vrednost

√x. Dozvoljeno je

koristiti funkciju sqrt(double x) koja se nalazi u klasi Math.

2 1000 -1 0> 1.41 > 31.62 > NaN > 0.0

Zadatak 4.3 Napisati funkciju rastojanje(double x1, double y1,double x2, double y2) koja izracunava euklidsko rastojanja izmedu tacakaA(x1, y1) i B(x2, y2) po formuli:

d =√(x2 − x1)2 + (y2 − y1)2

Napisati program koji sa standardnog ulaza unosi realne brojeve x1, y1 i x2,y2 i na standardni izlaz ispisuje rezultat poziva funkcije rastojanje(doublex1, double y1, double x2, double y2). Dozvoljeno je koristiti funkcijesqrt(double x) i pow(double x, double y) koje se nalazi u klasi Math.

0 1 0 -10 1 0 -110 5 5 1.30 5 5 15.5> 10 > 5.66 > 7.07 > 16.67

5 Kontrola toka programaKako bismo kontrolisali tok programa, koristimo naredbe if, for i while

koje ce biti opisane u kasnijem delu.

5.1 if-elseif-else grananjeKako bismo odredeni kod izvsili samo u nekim slucajevima, koristimo na-

redbe grananja u sledecem obliku:

if (uslov1) {naredba1;

} else if (uslov2) {naredba2;

} else {naredba3;

}naredba4;

Ako je uspunjen uslov1, onda se izvrsava naredba1, ako nije, onda se prove-rava uslov uslov2 i ako je tacan onda se izvrsava naredba2. Ako nisu ispunjenini uslov1 ni uslov2, onda se ulazi u else blok i izvrsava naredba naredba3. Na-kon izvrsavanja neke od pomenutih naredbi (naredba1, naredba2 i naredba3)program nastavlja izvrsavanje od naredbe naredba4.

Pogledajmo program koji pronalazi maksimum dva broja.

12

Page 13: Uvod u programski jezik Java - alas.math.rsalas.math.rs/~mi13283/systempro/skripte/java.pdf · Uvod u programski jezik Java ˇSkolaraˇcunara SystemPro NemanjaMi´covi´c nmicovic@outlook.com

int a = 10;int b = 20;int max;if (a > b)

max = a;else

max = b;System.out.println("Maksimum je: " + max);

> Maksimum je 20

5.2 while petljaNaredba while se koristi kada zelimo da ponovimo odredeni kod vise puta.

Struktura je sledeca:

while (uslov) {naredba;

}

Sve dok (otud i kljucna rec while koja na engleskom znaci sve dok) je ispu-njen uslov (na primer x > 3) izvrsava se naredba.

int brojac = 0;while (brojac < 5) {

System.out.println(brojac + " ");brojac++;

}

0 1 2 3 4

5.3 for petlja

6 NizoviNizovi su jedna od poznatih struktura podataka u programiranju. Na slici

je prikazan jedan niz.

Slika 2: Niz od 8 elemenata

6.1 Duzina nizaU Javi se indeksi indeksiraju od broja 0, tako da ukoliko imamo niz od n

elemenata, onda elementi imaju indekse 0, 1, ..., n-2, n-1. Dakle ako niz

13

Page 14: Uvod u programski jezik Java - alas.math.rsalas.math.rs/~mi13283/systempro/skripte/java.pdf · Uvod u programski jezik Java ˇSkolaraˇcunara SystemPro NemanjaMi´covi´c nmicovic@outlook.com

ima 4 elementa, njima odgovaraju indeksi 0, 1, 2, 3. Duzinu niza mozemodobiti tako sto pristupimo clanu podatku koristeci promenljivu length.

Sledeci kod pravi niz od 3 elementa i na standardni izlaz ispisuje koliko nizima elemenata.

int[] a = new int[3];System.out.println("Broj elemenata: " + a.length);

> Broj elemenata: 3

6.2 Primer unosa nizaint[] a = new int[3];a[0] = 1;a[1] = 10;a[2] = 20;System.out.println(a[0]);System.out.println(a[1]);System.out.println(a[2]);

> 1> 10> 20

6.3 Funkcija koja ispisuje nizUkoliko je potrebno da ispisemo sadrzaj niza to mozemo uciniti sledecim

kodom.

int[] a = new int[3]; // pravimo niz od 3 elementaa[0] = 1; a[1] = 2; a[2] = 3; // inicijalizemo na pocetne vrednosti

// ispisujemo sadrzaj nizafor (int i = 0; i < a.length; i++) {

System.out.print(a[i] + " ");}

No ukoliko postoji vise nizova mozemo navedeni kod uopstiti u funkciju kojumozemo pozivati za vise razlicitih nizova.

public static void ispisNiz(int[] a) {for (int i = 0; i < a.length; i++) {

System.out.print(a[i] + " "); // ispisujemo element po element}System.out.println(); // na kraj ispisa dodajemo novi red

}

public static void main(String[] args) {int[] a = new int[3];a[0] = 1; a[1] = 2; a[2] = 3;

14

Page 15: Uvod u programski jezik Java - alas.math.rsalas.math.rs/~mi13283/systempro/skripte/java.pdf · Uvod u programski jezik Java ˇSkolaraˇcunara SystemPro NemanjaMi´covi´c nmicovic@outlook.com

int[] b = new int[3];b[0] = 10; b[1] = 20; b[2] = 30;

System.out.println("Prvi niz:");ispisiNiz(a);System.out.println("Drugi niz:");ispisiNiz(b);

}

> Prvi niz:> 1 2 3> Drugi niz:> 10 20 30

6.4 Primer koji ispisuje niz obrnutoimport java.util.Scanner;

public class ObrtanjeNiza {public static void ispisiNizObrnuto(int[] a) {

for (int i = a.length-1; i >= 0; i--) {System.out.print(a[i] + " "); // ispisujemo element po element

}System.out.println(); // na kraj ispisa dodajemo novi red

}

public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("Unesite velicinu niza:");int n = sc.nextInt();int[] a = new int[n];

System.out.println("Unesite elemente:");for (int i = 0; i < a.length; i++) {

a[i] = sc.nextInt();}

// Pozivamo funkciju koja ispisuje niz obrnuto.System.out.println("Obrnuti niz:");ispisiNizObrnuto(a);

}}

> Unesite velicinu niza:> 4> Unesite elemente:> 1 2 3 4> Obrnuti niz:> 4 3 2 1

15

Page 16: Uvod u programski jezik Java - alas.math.rsalas.math.rs/~mi13283/systempro/skripte/java.pdf · Uvod u programski jezik Java ˇSkolaraˇcunara SystemPro NemanjaMi´covi´c nmicovic@outlook.com

7 Rad sa datotekama

7.1 Citanje iz datoteke

7.2 Pisanje u datoteku

8 Objektno orijentisano programiranjeObjektno orijentisano programiranje (OOP) predstavlja nacin programira-

nja u kojem se problem modeluje klasama i objektima. OOP je nastalo 1980ihgodina kao novi nacin kreiranja softvera koje je za cilj imalo da olaksa pravljenjei odrzavanje programa.

8.1 Objektni deo JaveJava je nastala pre svega kao objektno-orijentisani jezik i danas je jedan od

najkoriscenijih objektnih programskih jezika.Svaki Java fajl u sebi sadrzi tacno jednu klasu koja se mora zvati isto kao

i sam fajl. Na primer, ukoliko se fajl zove Ucenik.java onda u njemu morapostojati klasa Ucenik.

Na slici 3 prikazana je razlika izmedu klase i objekta.Klasa predstavlja nacrt nekog pojma. Ona definise njegovo ponasanje i

svojstva.Objekat predstavlja konkretan primerak neke klase. Na primer za klasu

Automobil, njeni objekti su BMW, Audi, Yugo, Fiat itd.

Slika 3: Prikaz klasa i objekata

16

Page 17: Uvod u programski jezik Java - alas.math.rsalas.math.rs/~mi13283/systempro/skripte/java.pdf · Uvod u programski jezik Java ˇSkolaraˇcunara SystemPro NemanjaMi´covi´c nmicovic@outlook.com

8.2 Nasa prva klasaUmesto da prvi govorimo sta su to konstruktor, metodi i polja, dacemo prvo

primer, a onda navedene pojmove objasniti referisuci se prikazani primer.Klasa koja ce biti prikazana za cilj ima da omoguci opis tacaka u 2d prostoru.

Slika 4 prikazuje tacke A i B.

x

y

A

2

3

B

5

1

Slika 4: Primeri tacaka u 2d prostoru

// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=// Fajl: Tacka.java// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=public class Tacka {

// POLJA - nasi privatni podaci koje krijemo od korisnika.private double x;private double y;

// KONSTRUKTORI - funkcije koji se pozivaju pri pravljenju objekta.// Moze ih biti vise.public Tacka() {

this.x = 0.0;this.y = 0.0;

}public Tacka(double x, double y) {

this.x = x;this.y = y;

}

17

Page 18: Uvod u programski jezik Java - alas.math.rsalas.math.rs/~mi13283/systempro/skripte/java.pdf · Uvod u programski jezik Java ˇSkolaraˇcunara SystemPro NemanjaMi´covi´c nmicovic@outlook.com

// GETERI - korisniku daju nase sakrivene privatne podatke.public double getX() {

return this.x;}public double getY() {

return this.y;}

// SETERI - postavljaju vrednosti 'x' i 'y'// na nase privatne podatke.public void setX(double x) {

this.x = x;}public void setY(double y) {

this.y = y;}

// Funkcija koja vraca String reprezentaciju naseg objekta.// Npr tacka ce biti prikazana kao -> (2, 3)public String toString() {

return "(" + this.x + "," + this.y + ")";}

}

// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=// Fajl: Main.java// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=public class Main {

public static void main(String[] args) {// Pravimo tacku koristeci prazan konstruktorTacka O = new Tacka();

// Pravimo tacku sa koordinatama (2, 3)Tacka A = new Tacka(2, 3);

// Pravimo tacku sa koordinatama (5, 1)Tacka B = new Tacka(5, 1);

// Ispisujemo tacku O pozivajuci metod toString()System.out.println("Tacka O: " + O.toString());

// Ispisujemo tacku A pozivajuci metod toString()System.out.println("Tacka A: " + A.toString());

// Ispis ce raditi i bez NASEG poziva metoda toString(),// Java ce je sama pozvati// kada objekat stavimo u 'print' ili 'println'System.out.println("Tacka B: " + B;

}}

18

Page 19: Uvod u programski jezik Java - alas.math.rsalas.math.rs/~mi13283/systempro/skripte/java.pdf · Uvod u programski jezik Java ˇSkolaraˇcunara SystemPro NemanjaMi´covi´c nmicovic@outlook.com

Pokretanje navedenog koda daje sledeci rezultat.

> Tacka O: (0, 0)> Tacka A: (2, 3)> Tacka B: (5, 1)

8.2.1 Konstruktori

Konstruktor je specijalna funkcija bez povratne vrednosti koju Java po-ziva kada pravi objekat neke klase. Ime konstruktora mora biti isto kao i imeklase. Dozvoljeno je imati vise konstruktora (sto je jako cest slucaj u praksi).Vidljivost konstruktora najcesce postavljamo na public kako bi korisnici naseklase mogli da prave objekte.

Na primer poziv:

Tacka A = new Tacka(2, 3)

poziva konstruktor:

public Tacka(double x, double y)

koji se nalazi unutar klase Tacka.Slicno tome, poziv:

Tacka A = new Tacka()

poziva konstruktor:

public Tacka()

koji se takode nalazi unutar klase Tacka.Konstruktor ce napraviti objekat (zauzece potrebnu memoriju) i vrednosti

objekta postaviti na odgovarajuce vrednosti (u nasem slucaju ce za tacku po-staviti vrednosti x i y koordinate).

8.2.2 Polja

Polja predstavljaju promenljive koja su glavno dostupna unutar nase klase.Sluze da omoguce funkcionisanje klase i najcesce zelimo da ih sakrijemo odspoljasnjeg sveta. Time pokusavamo da korisnika klase ne opterecujemo kakosmo implementirali klasu, vec mu jednostavno kroz javne metode omogucavamoda koristi nasu klasu.

U primeru koji je prikazan, polja su:

private double x;private double y;

8.2.3 Metodi

Metodi su funkcije koje pozivamo nad konkretnim objektom nase klase.Kako bi se metod pozvao, potrebno je pre toga napraviti sam objekat koristicioperator new.

19

Page 20: Uvod u programski jezik Java - alas.math.rsalas.math.rs/~mi13283/systempro/skripte/java.pdf · Uvod u programski jezik Java ˇSkolaraˇcunara SystemPro NemanjaMi´covi´c nmicovic@outlook.com

// Pravimo objekat klase TackaTacka A = new Tacka(2, 3);

// Citamo x koordinatu objekta klase Tackadouble xKoordinata = A.getX();System.out.println("X koordinata: " + xKoordinata);

// Pozivamo metod koji menja neku vrednost unutar objekta.A.setX(42.42);System.out.println("X koordinata: " + xKoordinata);

> X koodinata: 2> X koodinata: 42.42

8.2.4 Metod toString()

Metod toString() je izuzetno koristan metod koji cemo skoro uvek defini-sati za nase klase. Njegova namena je da pruzi tekstualnu reprezentacijunaseg objekta.

Kako bismo definisali kako se nas objekat prikazuje kao String potrebno jeda implementiramo metod toString() unutar klase. Metod toString() imasledeci oblik:

public String toString() {String prikaz = "";// Nasa implementacija ide ovde.// ...// ...return prikaz;

}

Na primer za neku tacku koja se nalazi na koordinata 2 i 3, tekstualnareprezentacija bi bila:

> (2, 3)

8.3 Nasledivanje

8.4 Polimorfizam

20

Page 21: Uvod u programski jezik Java - alas.math.rsalas.math.rs/~mi13283/systempro/skripte/java.pdf · Uvod u programski jezik Java ˇSkolaraˇcunara SystemPro NemanjaMi´covi´c nmicovic@outlook.com

Literatura

21