Ласло Краус |
СИ2ОО2 Други колоквијум 25. 5. 2006. |
---|
Написати на језику Java следећи пакет типова:
char
која може да се дохвати и може да се састави текстуални облик знака.
'a'
до 'z'
; грешка је ако је почетни знак опсега већи од крајњег), да се уреди помоћу задатог уређивача и да се састави његов текстуални облик који садржи по 50 елемената у сваком реду. Приликом стварања, низ се пуни на подразумевани начин.
(10 поена) Саствити на језику Java класу с главном функцијом која направи један низ знакова, испише на главном излазу, уреди низ и поново испише на главном излазу. Сви параметри рада могу да буду константе (не треба ништа читати с главног улаза).
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:
а) Које су разлике између интерфејса и апстрактне класе?
б) Да ли се грана finally
извршава у случајевима: (1) није се десио изузетак у try
блоку; (2) десио се изузетак и обрада је настављена у грани catch
која завршава наредбом return
; (3) десио се изузетак и обрада је настављена у грани catch
која завршава наредбом throw
.
в) Који модификатор мора да стоји за метод из којег се позивају методи wait()
и notify()
?
// Uporediv.java package uredjivanje; public interface Uporediv { boolean manji (Uporediv u); boolean isti (Uporediv u); } // Znak.java package uredjivanje; public class Znak implements Uporediv { private char zn; public Znak (char zn) { this.zn = zn; } public char znak () { return zn; } public boolean manji (Uporediv u) { return zn < ((Znak)u).zn; } public boolean isti (Uporediv u) { return zn == ((Znak)u).zn; } public String toStrng () { return Character.toString (zn); } } // Casovnik.java package uredjivanje; public class Casovnik extends Thread { private int dt; private char zn; private boolean radi = false; public Casovnik (int dt, char zn) { this.dt = dt; this.zn = zn; start (); } public void run () { try { while (! interrupted ()) { if (! radi) synchronized (this) { while (! radi) wait (); } sleep (dt); System.out.print (zn); } } catch (InterruptedException g) {} } public synchronized void kreni () { radi = true; notify (); } public synchronized void stani () { radi = false; } public void zavrsi () { interrupt (); } } // Uredjivac.java package uredjivanje; public abstract class Uredjivac { private Casovnik cas; public Uredjivac (Casovnik cas) { this.cas = cas; } public void uredi (Uporediv[] u) { cas.kreni (); radi (u); cas.stani (); } protected abstract void radi (Uporediv[] u); } // Izbor.java package uredjivanje; public class Izbor extends Uredjivac { public Izbor (Casovnik cas) { super (cas); } protected void radi (Uporediv[] niz) { for (int i=0; i<niz.length-1; i++) for (int j=i+1; j<niz.length; j++) { if (niz[j].manji(niz[i])) { Uporediv u = niz[i]; niz[i] = niz[j]; niz[j] = u; } try { Thread.sleep (1); } catch (InterruptedException g) {} } } } // GOpseg.java package uredjivanje; public class GOpseg extends Exception { public String toString () { return "*** Neispravan opseg vrednosti!"; } } // NizZnakova.java package uredjivanje; public class NizZnakova { private Znak[] niz; public NizZnakova (int n) { niz = new Znak [n]; puni (); } public void puni (Znak p, Znak q) throws GOpseg { if (q.manji (p)) throw new GOpseg (); for (int i=0; i<niz.length; i++) niz[i] = new Znak ((char)(p.znak()+Math.random()*(q.znak()-p.znak()+1))); } public void puni () { try { puni (new Znak('a'), new Znak ('z')); } catch (GOpseg g) {} } public void uredi (Uredjivac u) { u.uredi (niz); } public String toString () { StringBuffer s = new StringBuffer (); for (int i=0; i<niz.length; i++) { s.append (niz[i].znak()); if (i%50==49 || i==niz.length-1) s.append ('\n'); } return s.toString (); } } // Test.java import uredjivanje.*; import usluge.Citaj; public class Test { public static void main (String[] varg) { Casovnik cas = new Casovnik (200, '*'); Uredjivac izbor = new Izbor (cas); NizZnakova niz = new NizZnakova (75); System.out.print (niz + "\n"); niz.uredi (izbor); System.out.print ("\n\n" + niz); cas.zavrsi (); } }(⇒ почетак)
plrsircnblhndbvjhsyslskhtsebylniunathmkfqvntknangg scgggnssmmvjckmwybbrnjexf *************************** aabbbbbcccdeeffggggghhhhiijjjkkkkllllmmmmnnnnnnnnn pqrrrsssssssstttuvvvwxyyy
Copyright © 2010, Laslo Kraus
Последња ревизија: 30.8.2010.