You are on page 1of 18

Ulazno-izlazni tokovi u Javi

U programskom jeziku Java postoji i podrka za rad sa perifernim ureajima. Povezivanje i rad sa
nekim ureajem se vri korienjem tzv. tokova (stream). Ako je u pitanju ureaj sa koga se
preuzimaju podaci (npr. tastatura ili skener), koristi se neka vrsta ulaznog toka, dok se za ureaje na
koje se alju podaci (npr. monitor ili tampa) koristi neka vrsta izlaznog toka. U Javi se monitor
raunara smatra za standardni izlazni tok (System.out), dok se tastatura deklarie kao standardni
ulazni tok (System.in). ak se i upis i itanje iz fajlova vri preko tokova.

Klase za rad sa tokovima u Javi su ve implementirane i nalaze se u paketu java.io. Izbor


odgovarajue klase zavisi od tipa podatka koji se prenosi.

Uitavanje sa tastature

Sa stanovita programskog jezika Java, tastatura predstavlja standardni ulazni tok raunara (za
razliku od monitora koji je stadardni izlazni tok). Referenciranje na tastaturu iz Jave se vri
korienjem klase System i njenog statikog atributa - System.in. Ovaj atribut je u stvari objekat
klase InputStream koja ima samo osnovne metode za uitavanje bajt po bajt. Rad sa tastaturom na
ovako elementarnom nivou uopte nije jednostavan i dodatne funkcionalnosti su potrebne. Zbog
toga se koristi klasa InputStreamReader. Ova klasa uitava vie bajtova i pretvara ih u slova.
Meutim, ovakvo uitavanje moe da bude neefikasno bez neke privremene memorije (buffer) u
koju bi se smestio deo niza slova dok se niz ne uita do kraja. Klasa BufferedReader upravo
postoji zbog toga da povea efikasnost ovog uitavanja. Prema tome, otvaranje ulaznog toka za
uitavanje se tastature izgleda ovako.

BufferedReader naziv_promenljive =
new BufferedReader(new InputStreamReader(System.in));

Klasa BufferedReader ima metodu readLine koja omoguava uitavanje celog niza znakova sa
tastature. Ova metoda vraa String u kojem se nalaze svi znakovi koje je korisnik uneo preko
tastature sve dok trenutka dok nije pritisnuo taster za kraj reda (znak enter). Metoda readLine
baca proveravani izuzetak klase IOException, pa je svaki poziv ove metode potrebno uokviriti try-
catch blokom.

Primer 1

Napraviti klasu UcitavanjeSaTastature koja ima:


Javnu statiku metodu koja sa tastature uitava String i ispisuje ga na ekranu uz
odgovarajuu poruku.

import java.io.*;

public class UcitavanjeSaTastature {

public static void ucitajIIspisiString(){


BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));

try{
System.out.print("Unesite poruku: ");
String s = br.readLine();

System.out.println("Uneli ste: "+s);


}catch(Exception e){
System.out.println("Greska: "+e.getMessage());
}
}
}

Da bi uitavanje sa tastature uopte moglo da pone, mora se otvoriti odgovarajui tok. Prema
tome, kreira se jedan objekat klase BufferedReader i njemu se kroz konstruktor prosleuje objekat
klase InputStreamReader koji dobija pokaziva na standardni ulaz - System.in. Kada se to uradi,
moe se pozvati metoda readLine da uita red slova. Poziv ove metode je uokviren u try-catch
blok. Metoda vraa uitani red slova kao String i kasnije ga ispisuje na ekranu.

Kada se neki red znakova uita sa tastature, metoda readLine vraa String koji sadri te znakove.
Meutim, ta se deava ako je potrebno sa tastature uitati neki broj? U tom sluaju, uitani String
se mora pretvoriti u broj. Klase Double, Integer i Boolean koje su ve pominjane u poglavlju o
listama sadre odgovarajue statike metode koje rade upravo konverziju iz String vrednosti u neki
prost tip: parseDouble, parseInt i parseBoolean. Metode parseDouble i parseInt
bacaju izuzetke tipa NumberFormatException ako uneti String ne moe da se uspeno konvertuje u
broj.

Primer 2

Dodati u klasu UcitavanjeSaTastature i sledee:


Statiku metodu koja sa tastature uitava realan broj i ispisuje na ekranu njegov kvadrat uz
odgovarajuu poruku.
Statiku metodu koja sa tastature uitava ceo broj i ispisuje na ekranu da li je deljiv sa dva.

Napisati klasu TestUcitavanjeSaTastature koja poziva sve metode klase UcitavanjeSaTastature.

public static void ucitajBrojIIspisiKvadrat(){


BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));

try{
System.out.print("Unesite realan broj: ");
String s = br.readLine();

double d = Double.parseDouble(s);
System.out.println("Kvadrat je: "+(d*d));

}catch(Exception e){
System.out.println("Greska: "+e.getMessage());
}
}

public static void ucitajBrojIIspisiParnost(){


BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
try{
System.out.print("Unesite ceo broj: ");
String s = br.readLine();

int i = Integer.parseInt(s);
if (i%2==0)
System.out.println("Broj je paran");
else
System.out.println("Broj je neparan");
}catch(Exception e){
System.out.println("Greska: "+e.getMessage());
}
}

public class TestUcitavanjeSaTastature {

public static void main(String[] args) {

UcitavanjeSaTastature.ucitajIIspisiString();

UcitavanjeSaTastature.ucitajBrojIIspisiKvadrat();

UcitavanjeSaTastature.ucitajBrojIIspisiParnost();

Pored ovog naina, postoji jo jedan nain za uitavanje sa tastature. U paketu java.util se nalazi
klasa Scanner koja omoguava malo jednostavnije uitavanje sa tastature ili iz tekstualnog fajla.
Prva pogodnost koju ova klasa uvodi je ta to sve njene metode za uitavanje bacaju samo
neproveravane izuzetke pa se try-catch blokovi ne moraju pisati. Ovo, meutim, i nije toliko
velika prednost jer e u sluaju da bude baen izuzetak (a nije napisan try-catch blok), program
prekinuti sa radom. Druga pogodnost je ta to metode ove klase mogu da uitaju i istovremeno
konvertuju uitani niz znakova u neki prost tip i to sve u jednom pozivu.

Pre uitavanja sa tastature potrebno je napraviti objekat klase Scanner. Konstruktor ove klase ima
samo jedan ulazni parametar, a to je ulazni tok iz kojeg se eli itati.

Scanner naziv_promenljive = new Scanner(System.in);

Za uitavanje jednog reda znakova, potrebno je pozvati nextLine metodu. Ova metoda vraa
String koji sadri sve znakove iz uitanog reda teksta. Metoda nextInt uitava jedan red znakova
sa tastature, pretvara ga u ceo broj i vraa taj broj kao povratnu vrednost. Metode nextDouble i
nextBoolean vre slinu funkciju samo to se kao rezultat dobija realan broj tj. boolean vrednost.

Primer 3

Uraditi zadatak iz prethodna dva primera, ali korienjem Scanner klase i njenih metoda.

public static void ucitajIIspisiString(){


Scanner in = new Scanner(System.in);
System.out.print("Unesite poruku: ");

String s = in.nextLine();

System.out.println("Uneli ste: "+s);


}

Kao to se vidi iz prethodnog koda, metode klase UcitavanjeSaTastature se, korienjem klase
Scanner, mogu napisati veoma lako i brzo. Problem je u tome to, ako se desi neki izuzetak,
program istog trenutka prekida sa radom. Zbog toga je ipak neophodno napisati try-catch blok
oko svake metode koja moe da baci neki izuzetak.

import java.util.Scanner;

public class UcitavanjeSaTastature {

public static void ucitajIIspisiString(){


Scanner in = new Scanner(System.in);

try {
System.out.print("Unesite poruku: ");

String s = in.nextLine();

System.out.println("Uneli ste: "+s);


} catch (Exception e) {
System.out.println(e.getMessage());
}
}

public static void ucitajBrojIIspisiKvadrat(){


Scanner in = new Scanner(System.in);

try{
System.out.print("Unesite realan broj: ");

double d = in.nextDouble();

System.out.println("Kvadrat je: "+(d*d));


} catch (Exception e) {
System.out.println(e.getMessage());
}
}

public static void ucitajBrojIIspisiParnost(){


Scanner in = new Scanner(System.in);

try{
System.out.print("Unesite ceo broj: ");

int i = in.nextInt();

if (i%2==0)
System.out.println("Broj je paran");
else
System.out.println("Broj je neparan");
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}

public class TestUcitavanjeSaTastature {

public static void main(String[] args) {

UcitavanjeSaTastature.ucitajIIspisiString();

UcitavanjeSaTastature.ucitajBrojIIspisiKvadrat();

UcitavanjeSaTastature.ucitajBrojIIspisiParnost();

Zadaci

Zadatak 1

Napisati klasu UcitavanjeSaTastature2 koja ima:


Javnu statiku metodu koja sa tastature uitava neki tekst i na ekranu ispisuje broj reenica u tom tekstu.
Smatra se da se reenica uvek zavrava takom.
Javnu statiku metodu koja sa tastature uitava reenicu i na ekranu ispisuje broj rei u toj reenici.
Javnu statiku metodu koja sa tastature uitava neki tekst i na ekranu ispisuje broj pojavljivanja rei sneg u
toj reenici. Potrebno je uzeti u obzir i sva pojavljivanja ove rei na poetku ili na kraju reenice. Reenica se
uvek zavrava takom.
Javnu statiku metodu koja sa tastature uitava realan broj koji predstavlja neku distancu u metrima i na ekranu
ispisuje tu istu dustancu ali izraenu u kilometrima.
Javnu statiku metodu koja sa tastature uitava vie realnih brojeva. Brojevi se unose sve dok se umesto broja
ne unese re kraj. Metoda onda na ekranu ispisuje njihovu sumu.
Javnu statiku metodu koja sa tastature uitava ceo broj i na ekranu ispisuje njegov faktorijel. Ako je uneti broj
jednak nuli ili manji od nule, na ekranu se ispisuje jedinica.
Javnu statiku metodu koja sa tastature uitava vie celih brojeva. Brojevi se unose sve dok se umesto broja ne
unese re kraj. Metoda onda na ekranu ispisuje njihov proizvod.

Napisati klasu TestUcitavanjeSaTastature2 poziva metode klase UcitavanjeSaTastature.

Reenje:

import java.io.*;

public class UcitavanjeSaTastature2 {

public static void UcitajIIspisiBrojRecenica(){


BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

try{
System.out.print("Unesite tekst: ");
String s = br.readLine();

int brojac = 0;
for (int i=0; i<s.length();i++)
if (s.charAt(i) == '.')
brojac++;

System.out.println("Broj recenica u tekstu je: "+brojac);


}catch(Exception e){
System.out.println("Greska: "+e.getMessage());
}
}

public static void UcitajIIspisiBrojReci(){


BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

try{
System.out.print("Unesite recenicu: ");

String s = br.readLine();

String[] reci=s.split(" ");


System.out.println("Broj reci u recenici je: "+reci.length);
}catch(Exception e){
System.out.println("Greska: "+e.getMessage());
}
}

public static void UcitajIIspisiBrojPonavljanjaReciSneg(){


BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

try{
System.out.print("Unesite recenicu: ");

String s = br.readLine();

String[] reci=s.split(" ");


int brojac = 0;

for(int i=0; i< reci.length;i++)


if (reci[i].equalsIgnoreCase("sneg") ||
reci[i].equals("sneg."))
brojac++;

System.out.println("Broj ponavljanja reci 'sneg' u recenici je: "


+brojac);
}catch(Exception e){
System.out.println("Greska: "+e.getMessage());
}
}

public static void UcitajMetreIIspisiKilometre(){


BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

try{
System.out.print("Unesite distancu izrazenu u metrima: ");

String s = br.readLine();

double metri = Double.parseDouble(s);


System.out.println("Distanca u kilometrima je: "+
(metri/1000));
}catch(Exception e){
System.out.println("Greska: "+e.getMessage());
}
}

public static void UcitajViseRealnihBrojevaIIspisiSumu(){


BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

boolean kraj = false;


double suma = 0;

while (!kraj){
try{
System.out.print("Unesite realan broj: ");

String s = br.readLine();

if (s.equals("kraj"))
kraj = true;
else
suma = suma + Double.parseDouble(s);

}catch(Exception e){
System.out.println("Greska: "+e.getMessage());
}
}

System.out.println("Suma brojeva je: "+suma);


}

public static void UcitajCeoBrojIIspisiFaktorijel(){


BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

try{
System.out.print("Unesite ceo broj: ");

String s = br.readLine();

int b = Integer.parseInt(s);
int faktorijel = 1;

for (int i=1; i<=b; i++)


faktorijel=faktorijel*i;

System.out.println("Faktorijel je: "+faktorijel);


}catch(Exception e){
System.out.println("Greska: "+e.getMessage());
}
}

public static void UcitajViseCelihBrojevaIIspisiProizvod(){


BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

boolean kraj = false;


int proizvod = 1;

while (!kraj){
try{
System.out.print("Unesite ceo broj: ");
String s = br.readLine();

if (s.equals("kraj"))
kraj = true;
else
proizvod = proizvod * Integer.parseInt(s);

}catch(Exception e){
System.out.println("Greska: "+e.getMessage());
}
}

System.out.println("Proizvod brojeva je: "+proizvod);


}

public class TestUcitavanjeSaTastature2 {

public static void main(String[] args) {

UcitavanjeSaTastature2.UcitajIIspisiBrojRecenica();
UcitavanjeSaTastature2.UcitajIIspisiBrojReci();
UcitavanjeSaTastature2.UcitajIIspisiBrojPonavljanjaReciSneg();
UcitavanjeSaTastature2.UcitajMetreIIspisiKilometre();
UcitavanjeSaTastature2.UcitajViseRealnihBrojevaIIspisiSumu();
UcitavanjeSaTastature2.UcitajCeoBrojIIspisiFaktorijel();
UcitavanjeSaTastature2.UcitajViseCelihBrojevaIIspisiProizvod();
}

Zadatak 2

Reiti prethodni zadatak ali korienjem Scanner klase za uitavanje sa tastature.

Reenje:

import java.util.Scanner;

public class UcitavanjeSaTastature3 {

public static void UcitajIIspisiBrojRecenica(){


Scanner in = new Scanner(System.in);

try{
System.out.print("Unesite tekst: ");

String s = in.nextLine();

int brojac = 0;
for (int i=0; i<s.length();i++)
if (s.charAt(i) == '.')
brojac++;

System.out.println("Broj recenica u tekstu je: "+brojac);


}catch(Exception e){
System.out.println("Greska: "+e.getMessage());
}
}

public static void UcitajIIspisiBrojReci(){


Scanner in = new Scanner(System.in);
try{
System.out.print("Unesite recenicu: ");

String s = in.nextLine();

String[] reci=s.split(" ");


System.out.println("Broj reci u recenici je: "+reci.length);
}catch(Exception e){
System.out.println("Greska: "+e.getMessage());
}
}

public static void UcitajIIspisiBrojPonavljanjaReciSneg(){


Scanner in = new Scanner(System.in);

try{
System.out.print("Unesite recenicu: ");

String s = in.nextLine();

String[] reci=s.split(" ");


int brojac = 0;

for(int i=0; i< reci.length;i++)


if (reci[i].equalsIgnoreCase("sneg") ||
reci[i].equals("sneg."))
brojac++;

System.out.println("Broj ponavljanja reci 'sneg' u recenici je: "


+brojac);
}catch(Exception e){
System.out.println("Greska: "+e.getMessage());
}
}

public static void UcitajMetreIIspisiKilometre(){


Scanner in = new Scanner(System.in);

try{
System.out.print("Unesite distancu izrazenu u metrima: ");

double metri = in.nextDouble();

System.out.println("Distanca u kilometrima je: "+


(metri/1000));
}catch(Exception e){
System.out.println("Greska: "+e.getMessage());
}
}

public static void UcitajViseRealnihBrojevaIIspisiSumu(){


Scanner in = new Scanner(System.in);

double suma = 0;

//Kraj se moze ocekivati kada se unese rec


//"kraj". U tom slucaju ce "nextDouble" metoda
//da baci izuzetak i taj iyuyetak ce da prekine
//while petlju.
try{
while (true){
System.out.print("Unesite realan broj: ");

suma += in.nextDouble();
}
}catch(Exception e){
System.out.println("Kraj ucitavanja");
}

System.out.println("Suma brojeva je: "+suma);


}

public static void UcitajCeoBrojIIspisiFaktorijel(){


Scanner in = new Scanner(System.in);

try{
System.out.print("Unesite ceo broj: ");

int b = in.nextInt();
int faktorijel = 1;

for (int i=1; i<=b; i++)


faktorijel=faktorijel*i;

System.out.println("Faktorijel je: "+faktorijel);


}catch(Exception e){
System.out.println("Greska: "+e.getMessage());
}
}

public static void UcitajViseCelihBrojevaIIspisiProizvod(){


Scanner in = new Scanner(System.in);

int proizvod = 1;

try{
while (true){
System.out.print("Unesite ceo broj: ");

proizvod*= in.nextInt();
}
}catch(Exception e){
System.out.println("Kraj ucitavanja");
}

System.out.println("Proizvod brojeva je: "+proizvod);


}

public class TestUcitavanjeSaTastature3 {

public static void main(String[] args) {

UcitavanjeSaTastature3.UcitajIIspisiBrojRecenica();
UcitavanjeSaTastature3.UcitajIIspisiBrojReci();
UcitavanjeSaTastature3.UcitajIIspisiBrojPonavljanjaReciSneg();
UcitavanjeSaTastature3.UcitajMetreIIspisiKilometre();
UcitavanjeSaTastature3.UcitajViseRealnihBrojevaIIspisiSumu();
UcitavanjeSaTastature3.UcitajCeoBrojIIspisiFaktorijel();
UcitavanjeSaTastature3.UcitajViseCelihBrojevaIIspisiProizvod();
}

Zadatak 3

Napraviti klasu NizInt koja ima:


Privatni atribut niz koji predstavlja niz celih brojeva.
Javnu metodu koja sa tastature uitava ceo broj i inicijalizuje niz na taj kapacitet. Ako je uneti kapacitet nula ili
manji od nule, potrebno je inicijalizovati niz na 10 elemenata. U sluaju da je baen izuzetak zbog greke pri
unosu kapaciteta sa tastature, potrebno je ispisati poruku o greci i postaviti kapacitet niza na 10 elemenata.
Javnu metodu koja, kada se pozove, sa tastature uitava sve elemente niza. Prvo je potrebno proveriti da li je
niz inicijalizovan. Ako niz nije inicijalizovan, metoda baca izuzetak i ne vri se uitavanje.
Javnu metodu koja na ekranu ispisuje elemente niza. Ako niz nije inicijalizovan, metoda baca izuzetak .

Napraviti klasu TestNizInt koja kreira jedan objekat klase NizInt i poziva njegove metode za inicijalizaciju i unos
elemenata, a nakon toga za ispis.

Reenje:

import java.io.*;

public class NizInt {

private int[] niz;

public void unesiKapacitet(){


BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

try{
System.out.print("Unesite kapacitet niza: ");
String s=br.readLine();

int kapacitet = Integer.parseInt(s);


if (kapacitet<=0)
niz = new int[10];
else
niz = new int[kapacitet];

}catch(Exception e){
System.out.println("Greska pri unosu kapaciteta: "
+e.getMessage());
niz = new int[10];
}
}

public void unesiElemente(){


BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

if (niz==null)
throw new RuntimeException("Niz nije inicijalizovan");

for(int i=0; i<niz.length;i++){


try{
System.out.print("Unesite "+i+". element niza: ");
String s=br.readLine();

int b = Integer.parseInt(s);
niz[i] = b;
}catch(Exception e){
System.out.println("Greska pri unosu "+i+". elementa: "
+e.getMessage());
}
}

public void ispisi(){


if (niz==null)
throw new RuntimeException("Niz nije inicijalizovan");

for (int i=0;i<niz.length;i++)


System.out.println(i+". element:"+niz[i]);
}

public class TestNizInt {

public static void main(String[] args) {

NizInt ni = new NizInt();

ni.unesiKapacitet();
ni.unesiElemente();
ni.ispisi();

}
}

Zadatak 4

Napraviti klasu NizDouble koja ima:


Privatni atribut niz koji predstavlja niz realnih brojeva.
Javnu metodu koja sa tastature uitava ceo broj i inicijalizuje niz na taj kapacitet. Ako je uneti kapacitet nula ili
manji od nule, potrebno je baciti izuzetak sa odgovarajuom porukom. U sluaju da je baen izuzetak zbog
greke pri unosu kapaciteta sa tastature, potrebno je ispisati poruku o greci.
Javnu metodu koja, kada se pozove, sa tastature uitava sve elemente niza. Prvo je potrebno proveriti da li je
niz inicijalizovan. Ako niz nije inicijalizovan, metoda baca izuzetak i ne vri se uitavanje.
Javnu metodu koja sumira elemente niza i vraa njihovu sumu. Ako niz nije inicijalizovan, metoda baca
izuzetak .

Napraviti klasu TestNizDouble koja kreira jedan objekat klase NizDouble i poziva njegove metode za inicijalizaciju i
unos elemenata, a nakon toga ispisuje sumu elemenata niza na ekranu.

Reenje:

import java.io.*;

public class NizDouble {

private double[] niz;

public void unesiKapacitet(){


BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

try{
System.out.print("Unesite kapacitet niza: ");
String s=br.readLine();

int kapacitet = Integer.parseInt(s);


if (kapacitet<=0)
throw new RuntimeException("Kapacitet niza mora biti "+
"veci od nule");

niz = new double[kapacitet];


}catch(Exception e){
System.out.println("Greska pri unosu kapaciteta: "
+e.getMessage());
}
}

public void unesiElemente(){


BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

if (niz==null)
throw new RuntimeException("Niz nije inicijalizovan");

for(int i=0; i<niz.length;i++){


try{
System.out.print("Unesite "+i+". element niza: ");
String s=br.readLine();

double element = Double.parseDouble(s);


niz[i] = element;
}catch(Exception e){
System.out.println("Greska pri unosu "+i+". elementa: "
+e.getMessage());
}
}

public double suma(){


if (niz==null)
throw new RuntimeException("Niz nije inicijalizovan");

double suma = 0;
for (int i=0;i<niz.length;i++) suma+=niz[i];

return suma;
}

public class TestNizDouble {

public static void main(String[] args) {

NizDouble nd = new NizDouble();

nd.unesiKapacitet();
nd.unesiElemente();
System.out.println("Suma elemeata niza je: "+nd.suma());

}
}

Zadatak 5

Napraviti javnu klasu ParkingMesto koja ima:


Privatni atribut slobodno koji predstavlja indikator zauzetosti parking mesta. Ovaj indikator ima vrednost
TRUE ako je mesto slobodno a FALSE ako nije.
Privatni atribut registarskiBroj koji predstavlja registarski broj vozila koje se nalazi na tom parking mestu
(String).
Odgovarajue javne get i set metode za ova dva atributa.
Redefinisanu toString metodu klase Object koja vraa String koji sadri sve podatke o parking mestu. Ako je
parking mesto slobodno, vraa se String Slobodno, a ako nije, onda se vraa podatak o registarskom broju
kola koja se nalaze na tom mestu.

Napraviti javnu klasu Parking koja ima:


Privatni atribut mesta koji predstavlja niz objekata klase ParkingMesto.
Javnu metodu koja sa tastature uitava ceo broj i inicijalizuje atribut mesta na taj kapacitet. Ako je uneti
kapacitet nula ili manji od nule, potrebno je inicijalizovati mesta na 20 elemenata. U sluaju da je baen
izuzetak zbog greke pri unosu kapaciteta sa tastature, potrebno je ispisati poruku o greci i postaviti kapacitet
parkinga na 20 elemenata. U svakom sluaju, potrebno je inicijalizovati svako pojedinano parking mesto tako
da bude slobodno (ak i u sluaju baenog izuzetka).
Javnu metodu koja, kada se pozove, sa tastature uitava podatke o svakom parking mestu. Prvo je potrebno
proveriti da li je niz inicijalizovan. Ako niz nije inicijalizovan, metoda baca izuzetak i ne vri se uitavanje.
Ako niz jeste inicijalizovan uitavanje se vri na sledei nain: podaci za svako parking mesto se unose u vidu
jednog String-a. Ako String ima vrednost slobodno (nebitno da li pie velikim ili malim slovima), parking
mesto treba da bude slobodno a registarski broj treba da bude null String. Ako uneti String ima bilo koju drugu
vrednost, to je onda registarski broj vozila na tom mestu (npr. BG 123-456).
Javnu metodu koja na ekranu ispisuje sva parking mesta. Ako atribut mesta nije inicijalizovan, metoda baca
izuzetak sa odgovarajuom porukom.

Napraviti javnu klasu TestParking koja kreira jedan objekat klase Parking, inicijalizuje ga na 5 mesta i unosu u njega
podatke o tri vozila za prva tri parking mesta, dok se preostala dva parking mesta smatraju slobodnim.

Reenje:

public class ParkingMesto {

private boolean slobodno;

private String registarskiBroj;

public String getRegistarskiBroj() {


return registarskiBroj;
}

public void setRegistarskiBroj(String registarskiBroj) {


this.registarskiBroj = registarskiBroj;
}

public boolean isSlobodno() {


return slobodno;
}

public void setSlobodno(boolean slobodno) {


this.slobodno = slobodno;
}

public String toString(){


if (slobodno)
return "Slobodno";
else
return registarskiBroj;
}

import java.io.*;

public class Parking {

private ParkingMesto[] mesta;

public void unesiKapacitet(){


BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

try{
System.out.print("Unesite kapacitet parkinga: ");
String s=br.readLine();
int kapacitet = Integer.parseInt(s);
if (kapacitet<=0)
mesta = new ParkingMesto[20];
else
mesta = new ParkingMesto[kapacitet];
}catch(Exception e){
System.out.println("Greska pri unosu kapaciteta parkinga: "
+e.getMessage());
mesta = new ParkingMesto[20];
}

for(int i=0;i<mesta.length;i++){
mesta[i] = new ParkingMesto();
mesta[i].setSlobodno(true);
}
}

public void unesiElemente(){


BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

if (mesta==null)
throw new RuntimeException("Parking nije inicijalizovan");

for(int i=0; i<mesta.length;i++){


try{
System.out.print("Unesite podatke za "+i+
". parking mesto: ");
String s=br.readLine();

if (s.equalsIgnoreCase("slobodno")){
mesta[i].setSlobodno(true);
mesta[i].setRegistarskiBroj(null);
}
else{
mesta[i].setSlobodno(false);
mesta[i].setRegistarskiBroj(s);
}
}catch(Exception e){
System.out.println("Greska pri unosu "+i+". elementa: "
+e.getMessage());
}
}

public void ispisi(){


if (mesta==null)
throw new RuntimeException("Parking nije inicijalizovan");

for (int i=0;i<mesta.length;i++)


System.out.println(i+". parking mesto:"+mesta[i]);
}

public class TestParking {

public static void main(String[] args) {

Parking p = new Parking();

p.unesiKapacitet();
p.unesiElemente();
p.ispisi();

Zadatak 6

Napisati klasu Knjiga koja ima:


Privatni atribut naslov.
Privatni atribut ISBN (String).
Privatni atribut autor.
Javne get i set metode za ove atribute. Nedozvoljene vrednosti za sva tri atributa su null String-ovi. U sluaju
unosa ovih vrednosti, potrebno je baciti izuzetak sa odgovarajuom porukom.
Redefinisanu metodu toString klase Object koja vraa String sa svim podacima o knjizi uz odogovarajui tekst.
Redefinisanu equals metodu klase Object koja kao ulazni argument dobija objekat klase Object. Metoda prvo
proverava da li je uneti objekat klase Knjiga, pa ako nije baca izuzetak. Metoda vraa true ako su ISBN i ISBN
unete knjige jednaki. Ako ISBN i ISBN unete knjige nisu jednaki metoda vraa false.

Napraviti klasu Biblioteka koja ima:


Privatni atribut knjige koji predstavlja listu objekata klase Knjiga. Ovu listu je potrebno odmah inicijalizovati.
Javnu metodu koja sa tastature uitava sve podatke o knjizi, i dodaje novu knjigu u biblioteku. Dodavanje se
vri samo ako u biblioteci ve ne postoji knjiga sa istim ISBN. Ako knjiga sa istim ISBN postoji, potrebno je
baciti izuzetak sa odgovarajuom porukom.
Javnu metodu koja sa tastature uitava podatke o vie knjiga i unosi ih u bazu (broj knjiga koje je potrebno
uneti nije unapred poznat). Posle unosa svake knjige, potrebno je pitati korisnika da li eli da unese jo jednu
knjigu. Ako korisnik odgovori sa DA, vri se unos jo jedne knjige, a u suprotnom se izvravanje metode
prekida.
Javnu metodu koja na ekranu ispisuje sadraj biblioteke. Ako je biblioteka prazna, ispisuje se poruka o tome.

Napraviti klasu TestBiblioteka koja kreira jedan objekat klase Biblioteka, u njega unosi dve knjige i ispisuje na ekranu
sadraj bibiloteke.

Reenje:

public class Knjiga {

private String naslov;


private String autor;
private String ISBN;

public String getAutor() {


return autor;
}
public void setAutor(String autor) {
if (autor == null)
throw new RuntimeException("Autor ne sme da bude null");

this.autor = autor;
}
public String getISBN() {
return ISBN;
}
public void setISBN(String isbn) {
if (isbn == null)
throw new RuntimeException("ISBN ne sme da bude null");

ISBN = isbn;
}
public String getNaslov() {
return naslov;
}
public void setNaslov(String naslov) {
if (naslov == null)
throw new RuntimeException("Naslov ne sme da bude null");

this.naslov = naslov;
}

public String toString(){


return "Naslov: "+naslov+" Autor: "+autor+" ISBN: "+ISBN;
}

public boolean equals (Object o){


if (!(o instanceof Knjiga))
throw new RuntimeException("Morate uneti objekat klase "+
"Knjiga");

Knjiga k = (Knjiga)(o);
if (ISBN.equals(k.getISBN()))
return true;
else
return false;
}

import java.io.*;
import java.util.LinkedList;

public class Biblioteka {

private LinkedList <Knjiga> knjige = new LinkedList <Knjiga>();

public void ucitajKnjigu(){


BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

try{
Knjiga k = new Knjiga();

System.out.print("Unesite naslov knjige: ");


k.setNaslov(br.readLine());

System.out.print("Unesite autora knjige: ");


k.setAutor(br.readLine());

System.out.print("Unesite ISBN knjige: ");


k.setISBN(br.readLine());

if (knjige.contains(k))
throw new RuntimeException("Ta knjiga vec postoji u "+
"biblioteci");

knjige.add(k);
}catch(Exception e){
System.out.println("Greska: "+e.getMessage());
}
}

public void ucitajViseKnjiga(){


BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

boolean kraj = false;


while (!kraj){
ucitajKnjigu();
try{
System.out.print("Da li zelite da unesete jos neku "
+"knjigu(DA/NE)? ");
String s = br.readLine();

if (!s.equals("DA"))
kraj = true;
}catch(Exception e){
System.out.println("Greska: "+e.getMessage());
}
}

public void ispisi(){


if (knjige.size() == 0)
System.out.println("Bibilioteka je prazna");
else{
for (int i=0;i<knjige.size();i++)
System.out.println(knjige.get(i));
}
}
}

public class TestBiblioteka {

public static void main(String[] args) {

Biblioteka b = new Biblioteka();

b.ucitajViseKnjiga();
b.ispisi();

You might also like