Ajuda com append

3 respostas
G

Olá pessoal, estou precisando de uma ajuda para desenvolver o meu List. Preciso criar os métodos append, prepend, insert e outros, porém estou com um problema no seguinte caso: Quando é chamado o meu List, eu já inicializo um vetor com tamanho 10, daí tudo certinho, mas se eu fizer um for onde eu mande inserir algo mais de 10 vezes, já da problema. Ele nunca entra no meu método criaVetor() e eu não consigo ver o por que. Talvez seja algo bem tosco, mas não tô conseguindo resolver.

ListUtil lista = new ListUtil();
      
       out.println(lista.Length());
       for (int i = 0; i < 40; i++) lista.append("teste");
       out.println(lista.Length());
class ListUtil {
    private static final int ASCII_SPACE = 32;
    private int ctd = 0, tamanho, qtd, i, x;
    Object objV[] = new Object[0];

    public ListUtil() {
        this.tamanho = 10;
        this.qtd = 0;
        objV = new Object[tamanho];
    }

    public void append(Object obj) {  
        for (i = 0; i < tamanho; i++) {
            if(objV[i] == null){
                objV[i] = obj;
                qtd++;
            }
            if(i >= tamanho){
                criaVetor();
            }    
        }
        for (i = 0; i < tamanho; i++) {
            if(objV[i] == null){
                objV[i] = obj;
                qtd++;
            }
        }    
    }

    public void prepend(Object obj) {
        objV[0] = obj;
        qtd++;
    }

    public void insert(Object obj, int p) {        
        if (p > (tamanho))criaVetor();
        for(i = 0; i < tamanho; i++){
            if (i == (p - 1)) {
                objV[i] = obj;
            }
        }     
        
        for (i = 0; i < tamanho; i++) {
            if (i == (p - 1)) {
                objV[i] = obj;
            }
        }      
        qtd++;
    }

    public Object criaVetor() {
        Object objB[] = new Object[0];
        objB = new Object[tamanho];

        for (i = 0; i < (tamanho - 1); i++) {
            objB[i] = objV[i];
        }

        int tamanho2 = tamanho;
        if (tamanho == tamanho) {
            tamanho = tamanho + 10;
        }
        objV = new Object[tamanho];

        for (i = 0; i < tamanho2; i++) {
            objV[i] = objB[x];
            x++;
        }
        return objV;
    }

    public String Length() {
        return "Quantidade:" + qtd + " Tamanho total:" + tamanho;
    }
}

3 Respostas

Roselito_Favero_da_S

Depois que o espaço de memória reservado para o vetor foi fixado (na linha 9 do seu código), ele não pode mais ser aumentado.

Por que você não usa ArrayList?

Janerson

use Array.copyOff

Rodrigo_Sasaki

Por que tem um laço dentro do seu método append? Acho que você precisa repensar a implementação dele :slight_smile:

Criado 6 de outubro de 2013
Ultima resposta 7 de out. de 2013
Respostas 3
Participantes 4