import java.util.ArrayList;
import java.util.List;
abstract class Vozilo {
protected int brojTockova;
protected float duzina;
protected int zapreminaMotora;
protected int trenutnaBrzina;
protected int maxBrzina;
public Vozilo() {
this.trenutnaBrzina = 0;
}
public abstract void gas();
public String toString() {
return "Broj tockova: " + brojTockova + ", Duzina: " + duzina + "m, Zapremina motora: " +
zapreminaMotora + "cm^3, Trenutna brzina: " + trenutnaBrzina + "km/h, Max brzina: " + maxBrzina + "km/h";
}
}
interface PutnickoVozilo {
int brojSedista();
}
interface TeretnoVozilo {
float zapremina();
}
class Automobil extends Vozilo implements PutnickoVozilo {
public Automobil() {
this.brojTockova = 4;
}
public int brojSedista() {
return 5;
}
public void gas() {
if (zapreminaMotora < 2000)
trenutnaBrzina += 10;
else
trenutnaBrzina += 20;
if (trenutnaBrzina > maxBrzina)
trenutnaBrzina = maxBrzina;
}
}
class Autobus extends Vozilo implements PutnickoVozilo {
public Autobus() {
this.brojTockova = 6;
}
public int brojSedista() {
if (duzina < 10)
return 20;
else
return 40;
}
public void gas() {
if (zapreminaMotora < 3000)
trenutnaBrzina += 5;
else
trenutnaBrzina += 10;
if (trenutnaBrzina > maxBrzina)
trenutnaBrzina = maxBrzina;
}
}
class Kamion extends Vozilo implements TeretnoVozilo {
public Kamion(int brojTockova, float duzina, int zapreminaMotora, int trenutnaBrzina, int maxBrzina) {
this.brojTockova = Math.min(Math.max(brojTockova, 8), 12);
this.duzina = Math.max(Math.min(duzina, 14), 4);
this.zapreminaMotora = Math.min(Math.max(zapreminaMotora, 4000), 8000);
this.trenutnaBrzina = trenutnaBrzina;
this.maxBrzina = Math.min(maxBrzina, 150);
}
public float zapremina() {
if (duzina < 10)
return 4.0f;
else
return 7.0f;
}
public void gas() {
if (zapreminaMotora < 6000)
trenutnaBrzina += 5;
else
trenutnaBrzina += 15;
if (trenutnaBrzina > maxBrzina)
trenutnaBrzina = maxBrzina;
}
}
class Program {
public static void main(String[] args) {
List<Vozilo> vozila = new ArrayList<>();
vozila.add(new Automobil());
vozila.add(new Autobus());
vozila.add(new Kamion(10, 12.5f, 5500, 0, 120));
for (Vozilo vozilo : vozila) {
int brojPritisaka = (int) (Math.random() * 5) + 1;
for (int i = 0; i < brojPritisaka; i++) {
vozilo.gas();
}
}
for (Vozilo vozilo : vozila) {
System.out.println(vozilo.toString() + ", Broj sedista: " + getBrojSedista(vozilo) +
", Zapremina: " + getZapremina(vozilo));
}
}
public static int getBrojSedista(Vozilo vozilo) {
if (vozilo instanceof PutnickoVozilo) {
PutnickoVozilo putnickoVozilo = (PutnickoVozilo) vozilo;
return putnickoVozilo.brojSedista();
}
return 0;
}
public static float getZapremina(Vozilo vozilo) {
if (vozilo instanceof TeretnoVozilo) {
TeretnoVozilo teretnoVozilo = (TeretnoVozilo) vozilo;
return teretnoVozilo.zapremina();
}
return 0.0f;
}
}