Spero che l'esercizio sia solo a scopo didattico.
Dico questo perchè mi vengono i brividi solo a pensare di allocare un nuovo array con dimensione aumentata di 1, ricopiare gli elementi nel vecchio array e poi aggiungere il nuovo elemento.
Ti posto una soluzione di come le cose dovrebbero, in generale, essere fatte.
public class ArrayEstendibile {
privare int[] array;
private int numElementi;
public ArrayEstendibile(int dimensioneIniziale) {
array=new int[dimensioneIniziale];
numElementi=0;
}
public void aggiungiElemento(int elemento) {
if(numElementi>=array.lenght/2) {
int[] nuovoArray=new int[array.lenght*2] ; //creo un array con dimensione doppia
//rispetto ad "array"
for(int i=0; i<numElementi; i++) {
nuovoArray[i]=array[i]; //copio gli elementi di "array" in "nuovoArray"
}
nuovoArray[numElementi]=elemento; //aggiungo in coda l'elemento da inserire
numElementi++;
array=nuovoArray; //faccio puntare "array" a "nuovoArray"
else { //la dimensione dell'array è "buona" perciò non faccio nessun ridimensionamento
array[numElementi]=elemento;
numElementi++;
}
public int getElementi() {
//restituisce il numero effettivo di elementi presenti nell'array"
return numElementi;
}
public int getDimensione() {
//restituisce la dimensione (il numero di celle presenti) dell''array
return array.lenght;
}
}
Per quanto riguarda il tuo esercizio devi cambiare solo la condizione dell'if nel metodo aggiungi() opportunamenti.
Nota che volendo puoi inserire metodi come rimozioni o inserimenti in posizioni intermendie.
Volendo, nel caso delle rimozioni, puoi anche ridurre la dimensione dell'array quando il numero di elementi scende sotto una certa soglia.
Buon Divertimento!