Ласло Краус |
СИ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.