Ласло Краус |
СИ2ОО2 Други колоквијум 16. 5. 2007. |
---|
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:
а) Да ли је и зашто дозвољено написати:
interface I1{int m(int i);} interface I2{float m(int i);} class X implements I1,I2{/*…*/}
б) Да ли је из методе спољашње класе дозвољен приступ приватним члановима унутрашње (inner) класе и да ли се може без квалификације приступити из методе спољашње класе методи унутрашње? Зашто?
в) Који начин синхронизације је најприроднији уколико се жели да N активних објеката конкурентно изврше неку операцију, а затим се резултати извршених операција прикупљају секвенцијално.
Написати на језику Java следећи пакет типова:
(15 поена) Написати на језику Java интерактиван програм за извлачење бројева с највише шест цифара. Предвидети покретање задатог броја точкова, заустављање точкова с исписивањем њиховог стања и завршетак рада.
// Generator.java package lutrija; public interface Generator { public int slBroj (); } // Tocak.java package lutrija; class Tocak extends Thread implements Generator { private int cifra; private int dt; private int korak; private boolean radi = false; Tocak (int ddt, boolean raste) { dt = ddt; korak = raste ? 1 : -1; start (); } public void run () { try { while (! interrupted ()) { if (! radi) synchronized (this) { wait (); } sleep (dt); cifra = (cifra + korak + 10) % 10; } } catch (InterruptedException g) {} } synchronized void kreni () { radi = true; notify (); } public int slBroj () { radi = false; return cifra; } void zavrsi () { interrupt (); } } // GRadi.java package lutrija; public class GRadi extends Exception { public String toString () { return "*** Vec radi!"; } } // GStoji.java package lutrija; public class GStoji extends Exception { public String toString () { return "*** Ne radi!"; } } // GDuz.java package lutrija; public class GDuz extends Exception { public String toString () { return "*** Neispravna duzina!"; } } // Masina.java package lutrija; public class Masina { private Tocak[] niz; private int n; private boolean radi = false; public Masina (int kap) { niz = new Tocak [kap]; for (int i=0; i<kap; i++) niz[i] = new Tocak( (int)(10+Math.random()*10), i%2==0 ); } public void kreni (int n) throws GRadi, GDuz { if (radi) throw new GRadi (); if (n<=0 || n>niz.length) throw new GDuz (); radi = true; this.n = n; for (int i=0; i<n; niz[i++].kreni()); } public String stani () throws GStoji { if (! radi) throw new GStoji (); radi = false; String s = ""; for (int i=0; i<n; s=niz[i++].slBroj()+s); return s; } public void unisti () { for (Tocak t: niz) t.zavrsi (); } } // Izvlacenje.java import lutrija.*; import usluge.Citaj; public class Izvlacenje { public static void main (String[] varg) { Masina mas = new Masina (6); radi: while (true) { try { System.out.print ("Izbor (Kreni, Stani, Zavrsi)? "); switch (Citaj.Char ()) { case 'k': System.out.print ("Broj tockova? "); mas.kreni (Citaj.Int()); break; case 's': System.out.println ("Dobitni broj: " + mas.stani()); break; case 'z': break radi; } } catch (Exception g) { System.out.println (g); } } mas.unisti (); } }(⇒ почетак)
Izbor (Kreni, Stani, Zavrsi)? k Broj tockova? 5 Izbor (Kreni, Stani, Zavrsi)? s Dobitni broj: 15689 Izbor (Kreni, Stani, Zavrsi)? s *** Ne radi! Izbor (Kreni, Stani, Zavrsi)? k Broj tockova? 8 *** Neispravna duzina! Izbor (Kreni, Stani, Zavrsi)? k Broj tockova? 6 Izbor (Kreni, Stani, Zavrsi)? k Broj tockova? 3 *** Vec radi! Izbor (Kreni, Stani, Zavrsi)? s Dobitni broj: 724033 Izbor (Kreni, Stani, Zavrsi)? z
Copyright © 2010, Laslo Kraus
Последња ревизија: 30.8.2010.