...
Code Block |
---|
int getCell(int x, int y){ int index = calcIndex(x, y); return grid.get(index); } void setCell(int x, int y, int value){ int index = calcIndex(x, y); return grid.set(index, value); } |
En ting må legges merke til: Du kan ikke bruke set
og get
på ArrayList med indexer høyere enn antallet elementer du har add
-et. Vi blir derfor nødt til å initialisere ArrayList-en med null
-er:
Code Block |
---|
for(int i = 0; i < (x_max * y_max); i++) {
grid.add(null);
} |
Satt sammen for vi kode som ser slik ut:
Code Block |
---|
class Grid { private ArrayList<Integer>List<Integer> grid = new ArrayList<Integer>(); private int x_max; private int y_max; public Grid(int x_max, int y_max){ this.x_max = x_max; this.y_max = y_max; for(int i = 0; i < (x_max * y_max); i++){ grid.add(null); } } public int getCell(int x, int y){ int index = calcIndex(x, y); return grid.get(index); } public void setCell(int x, int y, int value){ int index = calcIndex(x, y); return grid.set(index); } private calcIndex(int x, int y){ return y*x_max + x; } } |
...
- Bedre feilhåndtering:Siden vi ikke gjør en sjekk om x og y er innenfor gyldig område, vil det skje to uting:
- Det vil være mulig (ved et uhell) å komme seg ned til en lavere rad hvis x settes større enn max_x.
- Siden vi gjør omregning til et internt format, vil IndexOutOfBoundsException som kastes av ArrayList vise til index-verdien vi får fra calcIndex.
- Dokumentasjon: Hvis man putter javadocs på klasser og metoder, blir det lett for deg selv og andre å slå opp bruken av denne klassen. Da holder det i elipse å flytte musepekeren over en refereansen til koden for få oversikt.
- Andre typer enn int: Koden over en begrenset til å bare kunne lagre int-er. Hvis man bruker generics (parametrisering av typer), er det mulig å gjøre klassen helt generell i hendhold til hvilken type verdier som lagres.
...