package luento15; /** * Esimerkki dynaamisesta taulukosta * @author Vesa Lappalainen * @version 1.0, 02.03.2002 * TODO: korjaa testit */ public class TaulukkoDouble { /** * Poikkeus joka heitetään kun taulukko on täysi */ public static class TaulukkoTaysiException extends Exception { /** */ private static final long serialVersionUID = 1L; /** * @param viesti joka tulee poikkeuksen mukana */ public TaulukkoTaysiException(String viesti) { super(viesti); } } private double alkiot[]; private int lkm = 0; /** * Luodaan taulukon vaatima tila */ public TaulukkoDouble() { alkiot = new double[10]; } /** * Luodaan taulukon vaatima tila * @param koko taulukon max-koko */ public TaulukkoDouble(int koko) { alkiot = new double[koko]; } /** * Lisätään luku jos mahtuu * @param luku lisättävä luku * @throws TaulukkoTaysiException jos ei mahu * @example *
     *   #THROWS TaulukkoDouble.TaulukkoTaysiException
     *   TaulukkoDouble luvut = new TaulukkoDouble(3);
     *   luvut.lisaa(3);
     *   luvut.toString() === "3.0";
     *   luvut.lisaa(99);
     *   luvut.toString() === "3.0 99.0";
     *   luvut.lisaa(77);
     *   luvut.toString() === "3.0 99.0 77.0";
     *   luvut.lisaa(66); #THROWS TaulukkoDouble.TaulukkoTaysiException
     *   luvut.toString() === "3.0 99.0 77.0";
     * 
*/ public void lisaa(double luku) throws TaulukkoTaysiException { /// TODO entä jos ei mahu if ( lkm >= alkiot.length ) throw new TaulukkoTaysiException("Ei mahu ennää "+luku); alkiot[lkm] = luku; lkm++; } /** * Palautta paikassa i olevan alkion * Jos indeksi laiton, palautetaan 0 * @param i paikka josta alkio otetaan * @return paikassa i oleva alkio * @example *
     *   #THROWS TaulukkoDouble.TaulukkoTaysiException
     *   TaulukkoDouble luvut = new TaulukkoDouble();
     *   luvut.lisaa(3);
     *   luvut.lisaa(99);
     *   luvut.get(0) ~~~ 3;
     *   luvut.get(1) ~~~ 99;
     *   luvut.get(12) ~~~ 0;
     * 
*/ public double get(int i) { if ( i < 0 || lkm <= i) return 0; return alkiot[i]; } /** * Asettaa paikkaan i alkion luku * Jos i laiton, ei tehdä mitään * @param i paikka johon laitetaan * @param luku luku joka laitetan taulukkoon * @example *
     *   #THROWS TaulukkoDouble.TaulukkoTaysiException
     *   TaulukkoDouble luvut = new TaulukkoDouble();
     *   luvut.set(4,3);
     *   luvut.toString() === "";
     *   luvut.lisaa(3);
     *   luvut.lisaa(99);
     *   luvut.lisaa(66);
     *   luvut.set(1,5);
     *   luvut.toString() === "3.0 5.0 66.0";
     *   luvut.set(0,1);
     *   luvut.toString() === "1.0 5.0 66.0";
     *   luvut.set(2,10);
     *   luvut.toString() === "1.0 5.0 10.0";
     * 
*/ public void set(int i, double luku) { //TODO rajat??? if ( i < 0 || lkm <= i) return; alkiot[i] = luku; } /** * Palauttaa taulukon merkkijonona * @return taulukko muodossa "0 2 99" * @example *
     *   #THROWS TaulukkoDouble.TaulukkoTaysiException
     *   TaulukkoDouble luvut = new TaulukkoDouble();
     *   luvut.lisaa(3);  luvut.lisaa(99); luvut.lisaa(4);
     *   luvut.toString() === "3.0 99.0 4.0";
     * 
*/ @Override public String toString() { StringBuilder s = new StringBuilder(); String tyhja = ""; for (int i=0; i