Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Lista

Preciso de uma ajudinha, estou fazendo uma estrutura para lista, no meu método de adicionar elementos, ele usa um array, porém este array tem 10 posições, e a minha dificuldade está em quando chegar a 10 elementos e eu querer adicionar mais. Eu estou tentando criar um array aux que pega os elementos guarda eles, e ae recria o array original com mais posições, bem está é a ideia mais não estou conseguindo abstrair isto. Alguém poderia dar uma luz? Hehe.

4 respostas

Fala aí, Marcos! Tudo certinho, cara? =)

Acredito que seja mais fácil você colocar aqui o seu código e nós irmos modificando o que você fez, o que acha? =)

Fábio

private int totalItens = 0;
    private Item[] vetorItem = new Item[10];

    public void adiciona(Item item) {


        vetorItem[totalItens] = item;


        totalItens++;

        if(totalItens == vetorItem.length){

            //Código aqui !

        }

Dentro do if eu queria fazer a lógica, que nem em uma lista mesmo. Poder adicionar quantos eu quiser, e nao apenas 10, mas isto dinamicamente alocando mais espaços no meu array.

solução!

Opa, Marcos! Boa! =)

Só toma cuidado com uma coisa... Imagina que você adicionou 10 elementos, o que vai acontecer? Do jeito que o código está?

Depois do 10º, totalItens será igual a 10 e, quando for adicionar o próximo, ao invés de tentar criar um novo array, ele tentará adicionar o novo item nesse array e você deve tomar uma Exception... =|

Então, o que você precisa fazer, é começar com a verificação:

private int totalItens = 0;
private Item[] vetorItem = new Item[10];

public void adiciona(Item item) {
  if (totalItens == vetorItem.length) {
    // Cria novo array...
  }

  vetorItem[totalItens] = item;
  totalItens++;
}

Agora, repare que só queremos criar um novo array, então podemos começar criando um vetor auxiliar:

// Código anterior omitido...

if (totalItens == vetorItem.length) {
  Item[] vetorAuxiliar = new Item[2 * totalItens];

  // E agora?
}

// Código posterior omitido...

Feito isso, queremos copiar tudo que temos em vetorItem para o novo vetor... Para isso, um simples for deve resolver. =)

// Código anterior omitido...

if (totalItens == vetorItem.length) {
  Item[] vetorAuxiliar = new Item[2 * totalItens];

  for (int i = 0; i < vetorItem.length; i++) {
    vetorAuxiliar[i] = vetorItem[i];
  }

  // E agora?
}

// Código posterior omitido...

Para finalizar, queremos que nosso vetorItem comece a utilizar o vetorAuxiliar:

// Código anterior omitido...

if (totalItens == vetorItem.length) {
  Item[] vetorAuxiliar = new Item[2 * totalItens];

  for (int i = 0; i < vetorItem.length; i++) {
    vetorAuxiliar[i] = vetorItem[i];
  }

  vetorItem = vetorAuxiliar;
}

// Código posterior omitido...

Acredito que fazendo isso resolvemos o problema! Você poderia testar e nos dar um feedback se resolver ou não, o seu problema? =)

Espero ter ajudado,

Fábio

Olá Fabio, muito obrigado, resolveu, consegui fazer os outros métodos de boa e este estava difícil, na verdade quase fiz igual a você so não estava achando um jeito de dobrar a lista ( 2 * totalItens)"Dahhhh", que na vdd é muita fácil e passou despercebido, obrigado mesmo. =D