Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
3.6 kB
2
Indexable
Never
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;
    }
}