VISER, Beograd
Ласло Краус
Објекнто програмирање 2 - колоквијуми
Први колоквијум
24. 11. 2012

Задатак | Напомене | Решење

Поставка задатка (решење | садржај)

Написати на језику Java следећи пакет типова (грешке пријављивати изузецима опремљеним текстовима порука):

Написати на језику Java програм који:

Користити константне параметре (не треба ништа учитавати с главног улаза).


Напомене (садржај)


Решење задатка (поставка | садржај)

// Vozilo.java

package parking;

public abstract class Vozilo {
  private String marka;
  private double sir, duz;
  
  public Vozilo(String m, double s, double d)
    { marka = m; sir = s; duz = d; }
  
  public double sir() { return sir; }

  public double duz() { return duz; }
  
  public abstract String vrsta();
  
  public String toString()
    { return vrsta() + "(" + marka + "," + sir + "," + duz + ")"; }
}

// Auto.java

package parking;

public class Auto extends Vozilo {

  public Auto(String m, double s, double d) { super(m, s, d); }
  
  public String vrsta() { return "Auto"; }
}

// Kamion.java

package parking;

public class Kamion extends Vozilo {

  public Kamion(String m, double s, double d) { super(m, s, d); }
  
  public String vrsta() { return "Kamion"; }
}

// GNeMoze.java

package parking;

public class GNeMoze extends Exception {
  public String toString() { return "*** Ne moze da se smesti!"; }
}

// Mesto.java

package parking;

public class Mesto implements Cloneable {
  private static int posId = 0;
  private int id = ++posId;
  private double sir, duz;
  private Vozilo voz = null;
  
  public Mesto (double s, double d) { sir = s; duz = d; }
  
  public Mesto() { this(2.5, 4.0); }
  
  public boolean moze(Vozilo v)
    { return voz==null && sir>=v.sir() &&duz>=v.duz(); }
  
  public Mesto smesti(Vozilo v) throws GNeMoze {
    if (!moze(v)) throw new GNeMoze();
    voz = v; return this;
  }
  
  public Vozilo dohvati() { return voz; }
  
  public Vozilo ukloni() { Vozilo v = voz; voz = null; return v; }
  
  public Mesto clone() {
    try {
      Mesto m = (Mesto)super.clone();
      m.id = ++posId; m.voz = null; return m;
    } catch (CloneNotSupportedException g) { return null; }
  }
  
  public String toString() {
    String s = id + "[" + sir + "," + duz + "]";
    if (voz != null) s += " " + voz;
    return s;
  }
}

// GIndeks.java

package parking;

public class GIndeks extends Exception {
  public String toString() { return "*** Nedozvoljen indeks!"; }
}

// Parking.java

package parking;

public class Parking {
  private Mesto[] mesta; private int slob;
  
  public Parking(Mesto[] mst) { mesta = mst; slob = mst.length; }
  
  public Parking dolazi(Vozilo v) throws GNeMoze {
    int i = 0;
    while (i<mesta.length && !mesta[i].moze(v)) i++;
    if (i == mesta.length) throw new GNeMoze();
    mesta[i].smesti(v); slob--;
    return this;
  }
  
  public Vozilo odlazi(int ind) throws GIndeks {
    if (ind<0 || ind>=mesta.length) throw new GIndeks();
    slob++;
    return mesta[ind].ukloni();
  }
  
  public int slobodno() { return slob; }
  
  public String toString() {
    StringBuilder sb = new StringBuilder();
    for (int i=0; i<mesta.length; i++)
      sb.append(mesta[i]).append('\n');
    return sb.toString();
  }
}

// Parkiranje.java

import parking.*;

public class Pаrkiranje {
  public static void main(String[] args) {
    Mesto m1 = new Mesto(2.5, 4),
          m2 = new Mesto(3, 6);
    Mesto[] mst = {m1, m2, m1.clone(), m2.clone()};
    Parking prk = new Parking(mst);
    try {
      prk.dolazi(new Kamion("KIA", 3, 5.5));
      prk.dolazi(new Auto("BMW", 2.5, 4));
      prk.dolazi(new Kamion("VW", 3, 6));
      prk.odlazi(1);
      prk.dolazi(new Auto("Jugo", 2, 3.6));
      prk.dolazi(new Kamion("VW", 3, 7));
    } catch (Exception g) {
      System.out.println(g);
    }
    System.out.print(prk);
  }
}

*** Ne moze da se smesti! 1[2.5,4.0] Auto(BMW,2.5,4.0) 2[3.0,6.0] Auto(Jugo,2.0,3.6) 3[2.5,4.0] 4[3.0,6.0] Kamion(VW,3.0,6.0)
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

Copyright © 2013, Laslo Kraus
Последња ревизија: 20.1.2013.