Professional Documents
Culture Documents
Nemanja Mićović
nmicovic@outlook.com
oktobar 2016
1
Sadržaj
1 O programskom jeziku Java 4
1.1 Principi na kojima je zasnovan . . . . . . . . . . . . . . . . . . . 4
1.2 Prevodenje Java koda . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Java virtuelna mašina . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Tipovi podataka 4
2.1 Primitivni tipovi podataka . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Klasni tipovi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3 String 6
3.1 Osnovni primeri . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.1.1 Naredba dodele . . . . . . . . . . . . . . . . . . . . . . . . 6
3.1.2 Pristup i-tom karakteru . . . . . . . . . . . . . . . . . . . 6
3.1.3 Dužina stringa . . . . . . . . . . . . . . . . . . . . . . . . 7
3.1.4 Poredenje stringova . . . . . . . . . . . . . . . . . . . . . 7
3.1.5 Prebacivanje veličine slova . . . . . . . . . . . . . . . . . . 7
3.1.6 Iteriranje kroz String . . . . . . . . . . . . . . . . . . . . 7
3.2 Zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4 Ulaz i izlaz 8
4.1 Opis metoda za izlaz . . . . . . . . . . . . . . . . . . . . . . . . . 8
4.2 Primer upotrebe metoda print i println . . . . . . . . . . . . . 9
4.3 Formatiranje izlaza . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4.4 Čitanje sa standardnog ulaza koristeći Scanner . . . . . . . . . . 9
4.5 Kompletan primer upotrebe klase Scanner . . . . . . . . . . . . . 10
4.6 Zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
6 Nizovi 13
6.1 Dužina niza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
6.2 Primer unosa niza . . . . . . . . . . . . . . . . . . . . . . . . . . 14
6.3 Funkcija koja ispisuje niz . . . . . . . . . . . . . . . . . . . . . . 14
6.4 Primer koji ispisuje niz obrnuto . . . . . . . . . . . . . . . . . . . 15
7 Rad sa datotekama 16
7.1 Čitanje iz datoteke . . . . . . . . . . . . . . . . . . . . . . . . . . 16
7.2 Pisanje u datoteku . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2
8.3 Nasledivanje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
8.4 Polimorfizam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Literatura 21
3
1 O programskom jeziku Java
Java je objektno orijentisan programski jezik koji je napravila kompanija Sun
Microsystems oko 1995. godine. Java danas predstavlja jedan od najkorišćenijih
i najpopularnijih programskih jezika. Veliku primenu jezik je pronašao i u pro-
gramiranju za Veb gde se često koristi kao implementacioni jezik na serverima.
Takode, kompanija Google je izabrala Javu kao implementacioni jezik za An-
droid aplikacije.
2 Tipovi podataka
U javi postoje dve vrste tipova podataka, primitivni tipovi i klasni tipovi.
Razvijaocu programa se omogućava da uvede svoje tipove podataka tako što
definiše nove klase. Više o klasama i objektno-orijentisanog programiranju biće
kasnije reči.
4
Slika 1: Prevodenje Java koda
Osim toga, java poseduje tip String koji je nešto izmedu primitivnog i
klasnog tipa. Naime, String se ponaša kao klasni tip (možemo nad njim pozivati
metode), ali se ipak dozvoljavaju neke naredbe poput naredbe ispod što inače
nije slučaj sa klasama i objektima.
String primer = "Zdravo svete";
5
2.2 Klasni tipovi
Java je objektno-orijentisani programski jezik tako da podržava koncepte
OOP-a poput:
• nasledivanja;
• polimorfizma;
• enkapsulacije.
Više o klasama i njihovom definisanju u kasnijem delu o objektno-
orijentisanom programiranju.
3 String
Klasa String predstavlja tip podatka koji se koristi za reprezentaciju teksta.
> Z
> o
6
3.1.3 Dužina stringa
Dužinu stringa možemo dobiti pozivajući metod length() nad stringom čiju
dužinu želimo.
String primer = "Zdravo";
int duzina = primer.length(); // metod koji vraca duzinu stringa
System.out.println(duzina); // ispisujemo duzinu stringa
> 6
String a = "test";
String b = "TEST";
System.out.println(a.toUpperCase());
System.out.println(b.toLowerCase());
> TEST
> test
> H
> e
> l
> l
> o
7
3.2 Zadaci
Zadatak 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 slovo
stringa txt pretvara u malo. Sa standardnog ulaza uneti jednu liniju teksta,
proslediti je funkciji pretvoriMala i na standardni izlaz ispisati rezultat rada
programa.
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 vraća broj
pojavljivanja karaktera cifara. Sa standardnog ulaza uneti jednu liniju teksta,
proslediti je funkciji prebrojCifre i na standardni izlaz ispisati rezultat rada
programa.
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. Sa
standardnog ulaza uneti string, a potom i karakter koje treba proslediti funkciji
prebrojKarakter i na standardni izlaz ispisati rezultat rada programa.
Teeeeest aab11 Zdravo123Svete
e 1 $
> 5 > 2 > 0
Zadatak 3.5 Sa standardnog ulaza se unose stringovi u beskonačnoj petlji.
Ukoliko je unet string koji je različit od "quit", na standardni izlaz treba is-
pisati uneti string transformisan u mala slova. Ukoliko je unet string "quit"
treba izaći iz programa.
HELLO quit test
> hello > > test
TeSt AAA
> test > aaa
quit quit
> >
4 Ulaz i izlaz
Za rad sa ulazom i izlazom (o fajlovima će biti reči u delu 7) ćemo koristiti
System.out.print i System.out.println metode.
8
4.2 Primer upotrebe metoda print i println
int 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
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
9
• new Scanner(...) predstavlja poziv konstruktoru klase Scanner
• System.in govori klasi Scanner da ulaz čita sa standardnog ulaza
import java.util.Scanner;
> 5
> 10
> Zbir: 15
Šta se dešava kada korisnik unese nešto što nije celi broj?
10
> 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 će biti posvećena pažnja nešto kasnije.
Kako bismo izbegli ovako neželjeno ponašanje programa, možemo koristiti funk-
cije iz tabele 3 poput hasNextInt().
import java.util.Scanner;
4.6 Zadaci
Zadatak 4.1 Napisati program koji sa standardnog ulaza unosi dva realna broja
tipa 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 klasi
Math.
2 100 1 -2
3 0 1000.11 2
> 8 > 1 > 1 > 4
11
Zadatak 4.2 Napisati program koji sa standardnog ulaza unosi√ realan broj tipa
double 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
Napisati program koji sa standardnog ulaza unosi realne brojeve x1, y1 i x2,
y2 i na standardni izlaz ispisuje rezultat poziva funkcije rastojanje(double
x1, double y1, double x2, double y2). Dozvoljeno je koristiti funkcije
sqrt(double x) i pow(double x, double y) koje se nalazi u klasi Math.
0 1 0 -1
0 1 0 -1
10 5 5 1.3
0 5 5 15.5
> 10 > 5.66 > 7.07 > 16.67
Ako je uspunjen uslov1, onda se izvršava naredba1, ako nije, onda se prove-
rava uslov uslov2 i ako je tačan onda se izvršava naredba2. Ako nisu ispunjeni
ni uslov1 ni uslov2, onda se ulazi u else blok i izvršava naredba naredba3. Na-
kon izvršavanja neke od pomenutih naredbi (naredba1, naredba2 i naredba3)
program nastavlja izvršavanje od naredbe naredba4.
Pogledajmo program koji pronalazi maksimum dva broja.
12
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
int brojac = 0;
while (brojac < 5) {
System.out.println(brojac + " ");
brojac++;
}
0 1 2 3 4
6 Nizovi
Nizovi su jedna od poznatih struktura podataka u programiranju. Na slici
je prikazan jedan niz.
13
ima 4 elementa, njima odgovaraju indeksi 0, 1, 2, 3. Dužinu niza možemo
dobiti tako što pristupimo članu podatku koristeći promenljivu length.
Sledeći kod pravi niz od 3 elementa i na standardni izlaz ispisuje koliko niz
ima elemenata.
int[] a = new int[3];
System.out.println("Broj elemenata: " + a.length);
> 1
> 10
> 20
No ukoliko postoji više nizova možemo navedeni kod uopštiti u funkciju koju
možemo pozivati za više različitih nizova.
14
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);
}
System.out.println("Unesite elemente:");
for (int i = 0; i < a.length; i++) {
a[i] = sc.nextInt();
}
15
7 Rad sa datotekama
7.1 Čitanje iz datoteke
7.2 Pisanje u datoteku
16
8.2 Naša prva klasa
Umesto da prvi govorimo šta su to konstruktor, metodi i polja, daćemo prvo
primer, a onda navedene pojmove objasniti referišući se prikazani primer.
Klasa koja će biti prikazana za cilj ima da omogući opis tačaka u 2d prostoru.
Slika 4 prikazuje tačke A i B.
3 A
1 B
2 5 x
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Fajl: Tacka.java
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
public class Tacka {
// POLJA - nasi privatni podaci koje krijemo od korisnika.
private double x;
private double y;
17
// GETERI - korisniku daju nase sakrivene privatne podatke.
public double getX() {
return this.x;
}
public double getY() {
return this.y;
}
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Fajl: Main.java
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
public class Main {
public static void main(String[] args) {
// Pravimo tacku koristeci prazan konstruktor
Tacka O = new Tacka();
18
Pokretanje navedenog koda daje sledeći rezultat.
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 ime
klase. Dozvoljeno je imati više konstruktora (što je jako čest slučaj u praksi).
Vidljivost konstruktora najčešće postavljamo na public kako bi korisnici naše
klase mogli da prave objekte.
Na primer poziv:
public Tacka()
koji se takode nalazi unutar klase Tacka.
Konstruktor će napraviti objekat (zauzeće potrebnu memoriju) i vrednosti
objekta postaviti na odgovarajuće vrednosti (u našem slučaju će za tačku po-
staviti vrednosti x i y koordinate).
8.2.2 Polja
Polja predstavljaju promenljive koja su glavno dostupna unutar naše klase.
Služe da omoguće funkcionisanje klase i najčešće želimo da ih sakrijemo od
spoljašnjeg sveta. Time pokušavamo da korisnika klase ne opterećujemo kako
smo implementirali klasu, već mu jednostavno kroz javne metode omogućavamo
da koristi našu 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 naše klase.
Kako bi se metod pozvao, potrebno je pre toga napraviti sam objekat koristići
operator new.
19
// Pravimo objekat klase Tacka
Tacka A = new Tacka(2, 3);
> X koodinata: 2
> X koodinata: 42.42
8.3 Nasledivanje
8.4 Polimorfizam
20
Literatura
21