Exercício - arrays

4 respostas
D

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? :!:

4 Respostas

diego2005

Hum....acho que poderia ser + - assim:

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;
     }
}

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

peron

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.

diego2005

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:

public static void main(String[] args)
      {
      		Array a = new Array();
      		
      		for(int i = 0; i < 30; i++)
      			a.adiciona(i);
      			
      		a.imprime();
      }

É isso ai..

luinwe

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…

Criado 21 de setembro de 2006
Ultima resposta 21 de set. de 2006
Respostas 4
Participantes 4