Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

16.3 Dynaamiset taulukot

Kerhon jäsenrekisterissä käytettiin osoitintaulukkoa dynaamisesti. Vastaavan rakenteen tarve tulee usein ohjelmoinnissa. Tällöin tulee aina vastaan ongelma: montako alkiota taulukossa on nyt? Jäsenrekisterissä tämä oli ratkaistu Jasenet- luokassa tekemällä sinne kentät, joista nämä rajat selviävät.

Javassa edällä mainittu dynaaminen taulukko voidaan toteuttaa käyttäjän kannalta todella joustavaksi:

dyna\Taulukko.java -esimerkki dynaamisesta taulukosta

	/**
	 * Esimerkki dynaamisesta taulukosta
	 * @author Vesa Lappalainen
	 * @version 1.0, 02.03.2002
	 */

	public class Taulukko {
	  public class TaulukkoTaysiException extends Exception {
	    TaulukkoTaysiException(String viesti) { super(viesti); }
	  }

	  private int alkiot[];
	  private int lkm;
	
	  public Taulukko() {
	    alkiot = new int[10];
	  }
	
	  public Taulukko(int koko) {
	    alkiot = new int[koko];
	  }
	
	  public void lisaa(int i) throws TaulukkoTaysiException {
	    if ( lkm >= alkiot.length ) throw new TaulukkoTaysiException("Tila loppu");
	    alkiot[lkm++] = i;
	  }
	
	  public String toString() {
	    StringBuffer s = new StringBuffer("");
	    for (int i=0; i<lkm; i++)
	      s.append(" " + alkiot[i]);
	    return s.toString();
	  }
	
	  public void set(int i, int luku) throws IndexOutOfBoundsException {
	    if ( ( i < 0 ) || ( lkm <= i ) ) 
	       throw new IndexOutOfBoundsException("i = " + i);
	    alkiot[i] = luku;
	  }
	
	  public int get(int i) throws IndexOutOfBoundsException {
	    if ( ( i < 0 ) || ( lkm <= i ) ) 
	      throw new IndexOutOfBoundsException("i = " + i);
	    return alkiot[i];
	  }
	
	  public static void main(String[] args) {
	    Taulukko luvut = new Taulukko();
	    try {
	      luvut.lisaa(0); luvut.lisaa(2);
	      luvut.lisaa(99);
	    } catch ( TaulukkoTaysiException e ) {
	      System.out.println("Virhe: " + e.getMessage());
	    }
	    System.out.println(luvut);
	    luvut.set(1,4);
	    System.out.println(luvut);
	    int luku = luvut.get(2);
	    System.out.println("Paikassa 2 on " + luku);
	    luvut.set(21,4);
	  }
	}


Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys