Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

NullPointerException

Olá, após construir o codigo da lista duplamente ligada, parece que meu toString ta dando pau, pois quando tento inserir no começo da lista, recebo uma nullPointerException. tentei revisar o codigo, mas não encontrei o erro. Alguém poderia me ajudar?

seguem os códigos:

package listaligada;

public class Celula {
    private Object elemento;
    private Celula anterior;
    private Celula proximo;

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

    public Celula  getAnterior(){
        return anterior;
    }
    public void setAnterior(Celula anterior) {
        this.anterior = anterior;
    }

    public Celula getProximo() {
        return proximo;
    }

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

    public Object getElemento() {
        return elemento;
    }

}

``` package listaligada;

public class ListaLigada { private Celula primeira = null; private Celula ultima = null; private int totalDeElementos = 0;

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

public void adiciona(Object elemento) { if (this.totalDeElementos == 0) { adicionaNoComeco(elemento); } else { Celula nova = new Celula(elemento); this.ultima.setProximo(nova); nova.setAnterior(this.ultima); this.ultima = nova; this.totalDeElementos++; } }

public void adiciona(int posicao, Object elemento) {

if (posicao == 0) { adicionaNoComeco(elemento); } else if (posicao == this.totalDeElementos) { adiciona(elemento); } else { Celula anterior = this.pegaCelula(posicao - 1); Celula proxima = anterior.getProximo();

Celula nova = new Celula(anterior.getProximo(), elemento); nova.setAnterior(anterior); anterior.setProximo(nova); proxima.setAnterior(nova); this.totalDeElementos++; } }

public Object pega(int posicao) { return this.pegaCelula(posicao).getElemento(); }

public void removeDoComeco() { if (this.totalDeElementos == 0) { throw new IllegalArgumentException("lista vazia"); } this.primeira = this.primeira.getProximo(); this.totalDeElementos--; if (this.totalDeElementos == 0) { this.ultima = null; } }

public void remove(int posicao) { if (posicao == 0) { this.removeDoComeco(); } else if (posicao == this.totalDeElementos - 1) { this.removeDoFim(); } else { Celula anterior = this.pegaCelula(posicao - 1); Celula atual = anterior.getProximo(); Celula proxima = atual.getProximo();

anterior.setProximo(proxima); proxima.setAnterior(anterior);

this.totalDeElementos--; } }

public void removeDoFim() { if (this.totalDeElementos == 1) { this.removeDoComeco(); } else { Celula penultima = this.ultima.getAnterior(); penultima.setProximo(null); this.ultima = penultima; this.totalDeElementos--; } }

public int tamanho() { return this.totalDeElementos; }

public boolean contem(Object elemento) { Celula atual = this.primeira; while (atual != null) { if (atual.getElemento().equals(elemento)) { return true; } atual = atual.getProximo(); } return false;

}

@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()); if (atual.getProximo() != null) { builder.append(","); } atual = atual.getProximo(); }

builder.append("]");

return builder.toString(); }

private boolean posicaoOcupada(int posicao) { return posicao >= 0 && posicao < this.totalDeElementos; }

private Celula pegaCelula(int posicao) { if (!posicaoOcupada(posicao)) { throw new IllegalArgumentException("posicao inexistente"); } Celula atual = primeira; for (int i = 0; i < posicao; i++) { atual = atual.getProximo(); } return atual; } }

1 resposta
solução!

consegui encontrar o erro. Era um problema na ordem em que os elementos foram colocados no construtor

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software