ArrayList

Da Head First Java O'Reilly, capitolo 6. Continuia trattazione della progettazione e sviluppo di un primo semplice programma in Java, una sorta di battaglia navale.

Abbiamo un bug nel nostro programma. Ci siamo dimenticati rimuovere i colpi che sono andati a segno dalla lista di caselle che compongono la nave da colpire.

Il modo più intuitivo di agire é quello di fare in modo che la nave sia un ArrayList di locazioni. Ogni volta che una cella della nave é individuata viene rimossa. Dunque la nostra nave contiene tutte e sole le celle non ancora scoperte.

ArrayList é una classe container template fornita da Java.
Alcuni dei metodi che mette a disposizione sono:
  • add(E elem): aggiunge l'elemento alla lista;
  • remove(int index): rimuove l'elemento all'indice passato;
  • remove(E elem): rimuove l'elemento passato, se presente in lista;
  • contains(E elem): true se c'é un match per l'elemento passato;
  • isEmpty(): true se la lista é vuota;
  • indexOf(E elem): l'indice dell'elemento, o -1;
  • size(): il numero di elementi nella lista;
  • get(int index): l'elemento all'indice passato.
La classe Simple cambia in questo modo:

package DotCom;

import java.util.ArrayList;

public class Simple {
private ArrayList<Integer> target;

public void setTarget(ArrayList<Integer> target) {
this.target = target;
}

public Result check(int x) {
int index = target.indexOf(x);
if(index == -1) {
return Result.Miss;
}

target.remove(index); // hit or kill!
return target.isEmpty() ? Result.Kill : Result.Hit;
}
}

Il target dei colpi ora é un ArrayList di interi, il metodo setTarget() cambia il suo parametro in input; check() risulta semplificata, in quanto usa i metodi di ArrayList.

I test cambiano di conseguenza, in quanto il bersaglio viene ora passato come ArrayList di interi. Ad esempio il finto main di prova prepara il target in questo modo:

int base = (int) (Math.random() * 5); // [0,4]
ArrayList<Integer> target = new ArrayList<Integer>();
target.add(base);
target.add(base + 1);
target.add(base + 2);

Baco risolto, i test ora corrono senza dare errori.

Nessun commento:

Posta un commento