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:
/**
* 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);
}
}