Exercício - arrays

Estou tentando resolver o seguinte exercício da apostila da Caelum:

“Caso a array já esteja cheia no momento de adicionar um novo funcionário, criar uma nova maior e copiar os valore. Isto é, fazer a realocação já que Java não tem isso.”

Por exemplo, criei uma primeira array com 10 posições. Consegui fazer o código para criar uma nova e copiar os valores da antiga, caso eu queira entrar com um 11º registro, assim como especificado no exercício. O problema é o seguinte: qdo vou inserir o 12º funcionário, o programa faz o processo todo novamente, pois vai utilizar o mesmo método adiciona(). Ou seja, vai acabar sobreescrevendo a segunda array criada anteriormente (acredito eu…) e o 12º funcionário vai entrar na posição 11 ao invés da 12, q seria o correto… :?

Alguém pode me ajudar? :!:

Hum…acho que poderia ser + - assim:

[code]public class Array
{
private int[] myArray;
private int indice;

public Array()
{
     this(10);
}
public Array(int tam)
{
     myArray = new int[tam];
     indice = 0;
}

public void adiciona(int num)
{
      if(indice == myArray.length)
          myArray = aumentaArray(myArray);
      
       myArray[indice] = num;
       indice++;           
}

 private int[] aumentaArray(int[] array)
 {
       int[] novoArray = new int[array.length + 1];

       for(int i = 0; i < array.length; i++)
           novoArray[i] = array[i];

       return novoArray;
 }

}[/code]

Não testei o código, qualquer problema poste de novo…T+

uma dica, quando for aumentar o tamanho do array, nao aumenta 1 unidade, e sim mais, assim, nao precisa toda hora ficar aumentando o tamanho dele, e copiando os valores do antigo…

ficaria:

      private static final int INCREMENTO_NUMERO = 5;
      private int[] aumentaArray(int[] array)
      {
            int[] novoArray = new int[array.length + INCREMENTO_NUMERO];
   
            for(int i = 0; i < array.length; i++)
                novoArray[i] = array[i];
 
            return novoArray;
      }
 }

Att.

Boa dica. Você ainda poderia adicionar um método imprime:

public void imprime() { for(int i = 0; i < myArray.length; i++) System.out.println(myArray[i]); }

E o método main poderia ser:

[code]public static void main(String[] args)
{
Array a = new Array();

  		for(int i = 0; i < 30; i++)
  			a.adiciona(i);
  			
  		a.imprime();
  }[/code]

É isso ai…

Desculpem a pergunta, talvez besta, mas não seria melhor definir os métodos da classe Array como static? Pelo menos não precisaria inicializar o objeto no método main, certo?
Fui…