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

NullPointerException - Lista ligada

Bom dia. Já vi outros comentários a respeito desse tema e tentei implementar a solução com as dicas dos tutores, porém o erro permanece.

package listaligada;

public class Celula {

    private Object elemento;
    private Celula proximo;

    public Celula(Object elemento, Celula proximo) {
        this.elemento = elemento;
        this.proximo = proximo;
    }

    public Object getElemento() {
        return elemento;
    }

    public Celula getProximo() {
        return proximo;
    }

    public void setProximo(Celula proximo) {
        this.proximo = proximo;
    }
}

package listaligada;

public class ListaLigada {

private Celula primeira = null;
private Celula ultima = null;
private int totalDeElementos = 0;


public void adicionaNoComeco(Object elemento) {
    Celula nova = new Celula(elemento, primeira);
    this.primeira = nova;

    if (totalDeElementos == 0) {
        this.primeira = this.ultima;
    }

    this.totalDeElementos++;
}

@Override
public String toString() {
    if (this.totalDeElementos == 0) {
        return "[]";
    }

    Celula atual = primeira;

    StringBuilder builder = new StringBuilder("[");

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

        atual = atual.getProximo();
    }

    builder.append("]");

    return builder.toString();
}


// adiciona no fim
public void adiciona(Object elemento) {

    if (totalDeElementos == 0) {
        adicionaNoComeco(elemento);
    } else {
        Celula nova = new Celula(elemento, null);
        this.ultima.setProximo(nova);
        this.ultima = nova;
        totalDeElementos++;
    }
}

// adiciona numa posição qualquer
public void adiciona(int posicao, Object elemento) {
}

public Object pega(int posicao) {
    return null;
}

public void remove(int posicao) {
}

public int tamanho() {
    return 0;
}

public boolean contem(Object o) {
    return false;
}

}

package listaligada;

public class TestaListaLigada {

    public static void main(String[] args) {

        ListaLigada lista = new ListaLigada();

        System.out.println(lista);
        lista.adicionaNoComeco("Mauricio");
        System.out.println(lista);
        lista.adicionaNoComeco("Paulo");
        System.out.println(lista);
        lista.adicionaNoComeco("Guilherme");
        System.out.println(lista);

        lista.adiciona("Marcelo");
        System.out.println(lista);

    }
}

Ao debugar o códgo, ele reclama do campo "atual" que é nulo. Atual é igual a primeira que é null. Já tentei inicializar de outra maneira, mas permanece o erro. 

[]
Exception in thread "main" java.lang.NullPointerException
    at listaligada.ListaLigada.toString(ListaLigada.java:32)
    at java.base/java.lang.String.valueOf(String.java:3388)
    at java.base/java.io.PrintStream.println(PrintStream.java:1047)
    at listaligada.TestaListaLigada.main(TestaListaLigada.java:11)
4 respostas

Acho que o problema está aqui

    if (totalDeElementos == 0) {
        this.primeira = this.ultima;
    }

Tente inverter: this.ultima = this.primeira;

Boa tarde Luiz. Obrigado, mas continua dando NullPointer. No console a reclamação continua sendo nesse trecho de código:

        for (int i = 0; i < totalDeElementos; i++) {
 AQUI ->           builder.append(atual.getElemento());
            builder.append(",");
            atual = atual.getProximo();
        }
solução!

Não tinha testado a minha sugestão antes, mas agora testei e era só inverter mesmo.

    public void adicionaNoComeco(Object elemento) {
        Celula nova = new Celula(elemento, primeira);
        this.primeira = nova;
        if (totalDeElementos == 0) {
            this.ultima = this.primeira;
        }
        this.totalDeElementos++;
    }

Saída:

[]
[Mauricio,]
[Paulo,Mauricio,]
[Guilherme,Paulo,Mauricio,]
[Guilherme,Paulo,Mauricio,Marcelo,]

Obrigado Luis. Resolvido.