Ласло Краус |
СИ2ОО2 Први колоквијум 20. 3. 2013. |
|---|
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:
а) Како се методама прослеђују параметри примитивних, односно класних, типова: по вредности или референци?
б) Зашто класе на Јави немају деструкторе? Како и зашто се компензује њихов недостатак?
в) Да ли је могућа комбинација модификатора abstract final за (1) класу (2) метод и зашто?
Саставити на језику Java следећи пакет класа:
B – биљном или Z – животињском), ниска назива врсте, као и једнословна ознака царства чијим се јединкама храни (N – за бића која се не хране ни биљном ни животињском храном). Може да се провери да ли биће једе задато биће и да се састави текстуални опис који у угластим заградама садржи ознаку царства којем припада, назив врсте и ознаку царства чијим се јединкама храни, раздвојене двотачком.
Vu) које се храни храном животињског порекла, коза је биће животињског царства (назив врсте Ko) које се храни храном биљног порекла, а купус је (неживо) биће биљног царства (назив врсте Ku) које се (више) не храни.
C{биће}.
(15 поена) Написати на језику Java програм (класу са главном функцијом) у којем се стварају један вук, једна коза и један купус, смештају у дружину на једној обали реке, а затим неколико пута чамцем пребацују из дружине на једној обали у дружину на другој обали (у оба смера), уз исписивање дружина на обе обале и чамца после сваке акције над дружином на обали. Није потребно водити рачуна о логичкој исправности редоследа пребацивања, односно избора бића, нити је потребно проверавати статус успеха после операција над дружинама.
// Bice.java
package bica;
public abstract class Bice {
public static final char BILJ = 'B', ZIV = 'Z', NE = 'N';
abstract public char carstvo();
abstract public String vrsta();
abstract public char hrana();
public boolean jede(Bice b) { return hrana() == b.carstvo(); }
public String toString()
{ return "[" + carstvo() + ":" + vrsta() + ":" + hrana() + "]"; }
}
// Vuk.java
package bica;
public class Vuk extends Bice {
public char carstvo(){return ZIV;}
public String vrsta(){return "Vu";}
public char hrana(){return ZIV;}
}
// Koza.java
package bica;
public class Koza extends Bice {
public char carstvo(){return ZIV;}
public String vrsta(){return "Ko";}
public char hrana(){return BILJ;}
}
// Kupus.java
package bica;
public class Kupus extends Bice {
public char carstvo(){return BILJ;}
public String vrsta(){return "Ku";}
public char hrana(){return NE;}
}
// Druzina.java
package bica;
public class Druzina {
private Bice[] bica = new Bice[3];
private int brBica;
public boolean dodaj(Bice b) {
if (brBica==3) return false;
for (int i=0; i<brBica; i++)
if (b.vrsta().equals(bica[i].vrsta())) return false;
if (brBica==1 && (b.jede(bica[0]) || bica[0].jede(b))) return false;
bica[brBica++] = b; return true;
}
public Bice uzmi(String vr) {
int i = 0;
while (i<brBica && !vr.equals(bica[i].vrsta())) i++;
if (i == brBica) return null;
if (brBica == 3) {
Bice b1=bica[(i+1)%3], b2=bica[(i+2)%3];
if (b1.jede(b2) || b2.jede(b2)) return null;
}
Bice b = bica[i];
bica[i] = bica[brBica-1];
bica[--brBica] = null;
return b;
}
public Bice zameni(Bice b, String vr) {
if (brBica == 3) return null;
Bice bb = uzmi(vr);
if (bb == null) return null;
if (dodaj(b)) return bb;
dodaj(bb); return null;
}
public String toString() {
String rez = "{";
for (int i = 0; i < brBica; i++) {
if (i > 0) rez += ",";
rez += bica[i];
}
return rez + "}";
}
}
// Camac.java
package bica;
public class Camac {
Bice b;
public boolean smesti(Bice bb) {
if (b != null) return false;
b = bb; return true;
}
public Bice uzmi() { Bice bb = b; b = null; return bb; }
public String toString() { return "C{" + (b!=null ? b : "") + "}"; }
}
// Program.java
import bica.*;
public class Program {
private static Druzina lObala=new Druzina();
private static Druzina dObala=new Druzina();
private static Camac camac = new Camac();
private static void pisi()
{ System.out.println(lObala + " " + camac + " " + dObala); }
public static void main(String[] argv) {
lObala.dodaj(new Vuk());
lObala.dodaj(new Kupus());
lObala.dodaj(new Koza()); pisi();
camac.smesti(lObala.uzmi("Ko")); pisi();
dObala.dodaj(camac.uzmi()); pisi();
camac.smesti(lObala.uzmi("Vu")); pisi();
camac.smesti(dObala.zameni(camac.uzmi(), "Ko")); pisi();
camac.smesti(lObala.zameni(camac.uzmi(), "Ku")); pisi();
dObala.dodaj(camac.uzmi()); pisi();
camac.smesti(lObala.uzmi("Ko")); pisi();
dObala.dodaj(camac.uzmi()); pisi();
}
}
{[Z:Vu:Z],[B:Ku:N],[Z:Ko:B]} C{} {}
{[Z:Vu:Z],[B:Ku:N]} C{[Z:Ko:B]} {}
{[Z:Vu:Z],[B:Ku:N]} C{} {[Z:Ko:B]}
{[B:Ku:N]} C{[Z:Vu:Z]} {[Z:Ko:B]}
{[B:Ku:N]} C{[Z:Ko:B]} {[Z:Vu:Z]}
{[Z:Ko:B]} C{[B:Ku:N]} {[Z:Vu:Z]}
{[Z:Ko:B]} C{} {[Z:Vu:Z],[B:Ku:N]}
{} C{[Z:Ko:B]} {[Z:Vu:Z],[B:Ku:N]}
{} C{} {[Z:Vu:Z],[B:Ku:N],[Z:Ko:B]}
(⇒ почетак)
Copyright © 2013, Laslo Kraus
Последња ревизија: 23.4.2013.