Visa elektrotehnicka skola, Beograd
Ласло Краус
Програмирање на језику Java - колоквијуми
Први колоквијум
Друга група
1. 12. 2006

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

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

Написати на језику Java следећи пакет типова:

Грешке пријављивати изузецима. У класама за изузетке предвидети састављање текста поруке.

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

На располагању стоји готова класа Citaj у безименом пакету која садржи заједничке методе за читање свих стандардних типова података (датотека \\Xs200-2\Nastava\ProgJava\Citaj.java).


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


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

// Uporediv.java

package proizvodi;

public interface Uporediv {
  boolean isti(Uporediv u);
}

// Proizvod.java

package proizvodi;

public abstract class Proizvod implements Uporediv {
  public abstract char vrsta();

  public abstract double V();

  public boolean isti(Uporediv p) { return vrsta() == ((Proizvod)p).vrsta(); }

  public String toString() { return Character.toString(vrsta()); }
}

// Kvadar.java

package proizvodi;

public class Kvadar extends Proizvod {
  double a, b, c;

  public Kvadar(double aa, double bb, double cc) { a = aa; b = bb; c = cc; }

  public char vrsta() { return 'K'; }

  public double V() { return a * b * c; }

  public boolean isti(Uporediv p) {
    return super.isti(p) && a==((Kvadar)p).a && b==((Kvadar)p).b && c==((Kvadar)p).c;
  }

  public String toString() {
    return super.toString() + '(' + a + ',' + b + ',' + c + ')';
  }
}

// Sfera.java

package proizvodi;

public class Sfera extends Proizvod {
  double r;

  public Sfera(double rr) { r = rr; }

  public char vrsta() { return 'S'; }

  public double V() { return 4*r*r*r*Math.PI/3; }

  public boolean isti(Uporediv p) { return super.isti(p) && r==((Sfera)p).r; }

  public String toString() { return super.toString() + '(' + r + ')'; }
}

// GProizv.java

package proizvodi;

public abstract class GProizv extends Exception {}

// GNemaMesta.java

package proizvodi;

public class GNemaMesta extends GProizv {
  public String toString() { return "*** Nema masta u skladistu!"; }
}

// GPuno.java

package proizvodi;

public class GPuno extends GProizv {
  public String toString() { return "*** Skladiste je puno!"; }
}

// GNemaProizv.java

package proizvodi;

public class GNemaProizv extends GProizv {
  public String toString() { return "*** Nema takvog proizvoda!"; }
}

// Skladiste.java

package proizvodi;

public class Skladiste {
  private Proizvod[] niz;
  private double V, Vmax;

  public Skladiste(int kap, double maxV) { niz = new Proizvod [kap]; Vmax = maxV; }

  public Skladiste() { this(10, 100); }

  public Skladiste stavi(Proizvod p) throws GNemaMesta, GPuno {
    double v = p.V();
    if (V+v > Vmax) throw new GPuno();
    int i = 0;
    while (i<niz.length && niz[i]!=null) i++;
    if (i == niz.length) throw new GNemaMesta();
    V += v; niz[i] = p;
    return this;
  }

  public Proizvod uzmi(Proizvod p) throws GNemaProizv {
    int i = 0;
    while (i<niz.length && (niz[i]==null || !niz[i].isti(p))) i++;
    if (i == niz.length) throw new GNemaProizv();
    Proizvod q = niz[i]; niz[i] = null; V -= q.V();
    return q;
  }

  public String toString() {
    StringBuffer s = new StringBuffer();
    for (int i=0; i<niz.length; i++)
      if (niz[i] != null)
        s.append(i+1).append(": ").append(niz[i]).append('\n');
    return s.toString();
  }
}

// ProizvodiT.java

import proizvodi.*;

public class ProizvodiT {
  private static class GIzbor extends GProizv {
    public String toString() { return "*** Nedozvoljen izbor!"; }
  }

  private static Proizvod citaj() throws GIzbor {
    System.out.print("(Kvadar, Sfera)? ");
    switch (Citaj.Char()) {
      case 'k': {
        System.out.print("a,b,c? ");
        return new Kvadar (Citaj.Double(),Citaj.Double(),Citaj.Double());
      } case 's': {
        System.out.print("r? ");
        return new Sfera (Citaj.Double());
      } default: throw new GIzbor();
    }
  }
  public static void main(String[] varg) {
    Skladiste sklad = new Skladiste(5, 100);
    radi: while (true) {
      try {
        System.out.print("(Stavi, Izvadi, Pisi, Kraj)? ");
        switch (Citaj.Char()) {
          case 's': sklad.stavi(citaj()); break;
          case 'i': sklad.uzmi(citaj()); break;
          case 'p': System.out.print(sklad); break;
          case 'k': break radi;
          default: throw new GIzbor();
        }
      } catch (GProizv g) {System.out.println(g);}
    }
  }
}
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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