Ласло Краус |
СИ2ОО2 Други колоквијум 28. 4. 2012. |
---|
Одговорити концизно (по једна или две реченице, или "да"/"не" где се не тражи образложење) и прецизно на следећа питaња:
а) Навести могуће декларације метода m()
класе class
X
implements
I1
, I2
{…}
, ако су: interface
I1
{
void
m()
throws
E1,E2,E3;
}
и interface
I2
{
void
m()
throws
E2,E3,E4;
}
?
б) Да ли је из методе спољашње класе дозвољен приступ приватним члановима унутрашње (inner) класе и да ли се може без квалификације (директним именовањем) приступити из методе спољашње класе методи унутрашње? Зашто?
в) Да ли метод нити start()
позива метод run()
? Образложити.
Написати на језику Java следећи пакет типова (грешке пријављивати изузецима опремљеним текстовима порука):
(
наплаћенИзнос)
. Грешка је ако је категорија ван дозвољеног опсега или ако у тренутку наплате није дефинисан ценовник.
(
наплаћено):
станица,…,
станица. При отварању се задаје нови ценовник који се прослеђује свим станицама. Кад је рампа отворена, возила случајних категорија, које су у дозвољеном интервалу према важећем ценовнику, пристижу у случајним верменским интервалима од (1±0,3)tsr, на случајну станицу рампе.
(5 поена) Написати на језику Java програм који направи једну наплатну рампу коју отвори, после извесног времена испише на главном излазу, после још нешто времена затвори, испише на главном излазу и уништи. Користити константне параметре (не треба ништа учитавати с главног улаза).
// Kategor.java package putarina; public interface Kategor { int kategor(); }(⇒ почетак)
// Vozilo.java package putarina; public class Vozilo implements Kategor { private int kat; public Vozilo(int k) { kat = k; } public int kategor() { return kat; } }
// GKat.java package putarina; public class GKat extends Exception { public String toString() { return "*** Nepostojeca kategorija!"; } }
// Cenovnik.java package putarina; public class Cenovnik { private int[] putarine; public Cenovnik(int[] put) { putarine = put; } public int brKat() {return putarine.length;} public int putarina(int kat) throws GKat { if (kat<=0 || kat>putarine.length) throw new GKat(); return putarine[kat-1]; } }
// Stanica.java package putarina; public class Stanica implements Cloneable { private static int posId = 0; private int id = ++posId; private Cenovnik cen; private int naplaceno = 0; public Stanica novCen(Cenovnik c) { cen = c; naplaceno = 0; return this;} public Stanica clone() { try { Stanica s = (Stanica) super.clone(); s.id = ++posId; s.naplaceno = 0; return s; } catch (CloneNotSupportedException g) { return null; } } public Stanica naplati(Vozilo v) throws GKat { naplaceno += cen.putarina(v.kategor()); return this; } public int naplaceno() { return naplaceno; } public String toString() { return id + "(" + naplaceno + ")"; } }
// Rampa.java package putarina; public class Rampa extends Thread { private String naziv; private Stanica[] stanice; private long tSr; private Cenovnik cen; private boolean radi = false; public Rampa(String naz, Stanica stan, int brStan, long tsr) { naziv = naz; tSr = tsr; stanice = new Stanica [brStan]; for (int i=0; i<brStan; i++) stanice[i] = stan.clone(); start(); } public void run() { try { while (!interrupted()) { synchronized (this) { if (!radi) wait(); } sleep((long)(tSr*(0.7+0.6*Math.random()))); Vozilo v = new Vozilo ((int)(Math.random()*cen.brKat()+1)); try { stanice[(int)(Math.random()*stanice.length)].naplati(v); } catch (GKat g) {} } } catch (InterruptedException g) {} } public synchronized void otvori(Cenovnik c) { cen = c; for (Stanica s: stanice) s.novCen(c); radi = true; notify(); } public void zatvori() { radi = false; } public void unisti() { interrupt(); } public int naplaceno() { int uk = 0; for(Stanica s: stanice) uk += s.naplaceno(); return uk; } public String toString() { String s = naziv + "(" + naplaceno()+"):"; for (int i=0; i<stanice.length; i++) { if (i > 0) s += ","; s += stanice[i]; } return s; } }
// Program.java import putarina.*; public class Program { public static void main(String[] varg) { try { Rampa rampa = new Rampa("Jagodina", new Stanica(), 3, 300); rampa.otvori(new Cenovnik(new int[] {100, 200, 500})); Thread.sleep(10000); System.out.println(rampa); Thread.sleep(5000); rampa.zatvori(); System.out.println(rampa); rampa.unisti(); } catch (InterruptedException g) {} } }
Jagodina(8400):2(3000),3(2300),4(3100) Jagodina(12700):2(3900),3(5100),4(3700)
Copyright © 2013, Laslo Kraus
Последња ревизија: 19.3.2013.