Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

inserir elemento no fim da lista

Gente estou com um problema que persiste a tempos, eu seguindo as aulas dá o erro de java.lang.NullPointerException ao instanciar e invocar o método addFim

Aqui o código.

public class ListaLigada {

    private Celula primeiro=null;
    private Celula ultimo=null;
    private int totalElementos=0;

    public void addComeco(Object element) {
        Celula nova = new Celula(element,primeiro);
        this.primeiro=nova;
        this.totalElementos++;
        if(this.totalElementos==0) {
            this.ultimo=this.primeiro;
        }
    }
    public String toString() {
        if(this.totalElementos == 0) {
            return "[]";
        }
        Celula atual =primeiro;
        StringBuilder builder= new StringBuilder ("[");

        for (int i = 0; i < totalElementos; i++) {
                builder.append(atual.getElemento());
                builder.append(",");

                atual= atual.getProximo();
        }

        builder.append("]");
        return builder.toString();

    }
    public void addFim(Object elemento) {

        if(this.totalElementos == 0) {
            addComeco(elemento);
        } else {
            Celula nova = new Celula(elemento,ultimo);
            this.ultimo.setProxima(nova);
            this.ultimo=nova;
            this.totalElementos++;
        }
    }

}
4 respostas

Olá Ana, erro informa qual linha exatamente que ocorre o NullPointerException?

Eu estou perguntando pois o parâmetro do método addFim, pode estar nulo e por isso a exceção é lançada.

Olá, o erro se dá na linha 39

solução

Ana, o erro acontece na linha:

this.ultimo.setProxima(nova);

Isso quer dizer que o atributo 'ultimo' tem o seu valor definido como nulo. Então o valor do atributo ainda não foi alterado. Verifiquei o seu código e o bloco que altera o valor do atributo 'utlimo' é:

this.totalElementos++;
if(this.totalElementos==0) {
    this.ultimo=this.primeiro;
}

Olha só, você está dizendo que o seu 'totalElementos' vai ser incrementado(++) e depois verifica se o atributo 'totalElementos' é igual à 0(zero). A aplicação nunca vai entrar dentro desse bloco if porque você está incrementando antes de verificar se é igual à zero. Insira a linha depois, assim:

if(this.totalElementos==0) {
    this.ultimo=this.primeiro;
}
this.totalElementos++;

Obrigada deu certo! abraços