5
respostas

Construtor não compila

O meu código está igual ao do professor, porém esse construtor sempre apresenta erros. Alguém pode me ajudar?

public Celula(Object elemento) {
        this(null, elemento);
    }

esse é o restante do código:

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(this.totalDeElementos == 0){
            this.ultima    = this.primeira;
        }

        this.totalDeElementos++;
    }

    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();

    }

    public void adiciona(Object elemento){

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

    }

    private boolean posicaoOcupada(int posicao){

        return posicao >= 0 && posicao < this.totalDeElementos;
    }

    private Celula pegaCelula(int posicao){
        if(!posicaoOcupada(posicao)){
            throw new IllegalArgumentException("Posição inexistente!");
        }

        Celula atual = primeira;

        for(int i = 0; i< posicao; i++){
            atual = atual.getProximo();
        }

        return atual;
    }

    public void adicionaNoMeio(int posicao, Object elemento){
        if(posicao == 0){
             adicionaNoComeco(elemento);
        } else if(posicao == this.totalDeElementos){
            adiciona(elemento);
        } else {
            Celula anterior = this.pegaCelula(posicao - 1);
            Celula nova = new Celula(elemento,anterior.getProximo());
            anterior.setProximo(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){

    }

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

    public boolean contem(Object o){
        return false;

    }
}

Penso que o erro, talvez, seja a versão do Java...

5 respostas

Fala ai André, de boa ?

Consegue passar o código completo ?

Olá André! Tudo bem?

Apenas uma sugestão para melhorar nossa comunicação aqui no fórum de dúvidas: utilize a opção do editor de “Inserir Código”.

Vai aparecer assim um lugar para você colar o seu código. Utilizando essa função o seu código aparecerá com uma formatação que ajudará muito os moderadores/instrutores a lerem. Dessa forma, eles podem responder mais rápido a sua dúvida #fikadika

Olá André, ao invés de você criar o construtor Celula passando "null" , cria ele passando a referencia para o "elemento" novamente.

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

Vai funcionar da mesma forma.

Eu tentei trocar o construtor referenciando this,elemento = elemento, porem ocorre outro erro que eu não sei se tem a ver com o construtor em questão. E o código eu já postei, ele está aproveitando o código da lista encadeada para fazer a lista duplamente encadeada.

Estou tendo o mesmo problema.

package aula3_listas_duplamente_ligadas;

public class Celula {

    private Object elemento;
    private Celula anterior;
    private Celula proximo;


    public Celula(Object elemento) {
         this(null, elemento);
    }

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

    public Celula getProximo() {
        return proximo;
    }

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

    public Object getElemento() {
        return elemento;
    }

    public Celula getAnterior() {
        return anterior;
    }

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

}

Esse é o ponto onde o eclipse aponta o erro.

public Celula(Object elemento) {
         this(null, elemento);
    }

Essa é a parte onde o construtor se faz necessário.

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(this.primeira, (Celula) elemento);
            this.primeira.setAnterior(nova);
            this.primeira = nova;
        }
        this.totalDeElementos++;
    }

Esse é o erro que apresenta

    The constructor Celula(null, Object) is undefined

    at aula3_listas_duplamente_ligadas.Celula.<init>(Celula.java:11)
    at aula3_listas_duplamente_ligadas.ListaDuplamenteLigada.adicionaNoComeco(ListaDuplamenteLigada.java:14)
    at aula3_listas_duplamente_ligadas.TestaListaDuplamenteLigada.main(TestaListaDuplamenteLigada.java:11)

Mesmo trocando o

public Celula(Object elemento) {
         this(null, elemento);
    }

por

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

eu passo a ter problema no else da formula

        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(this.primeira, elemento);
            this.primeira.setAnterior(nova);
            this.primeira = nova;**
        }
        this.totalDeElementos++;
    }

O próprio eclipse me informa.

The constructor Celula(Celula, Object) is undefined

Como posso resolver esse problema?

do exercício de Estrutura de Dados computação na prática com java link https://cursos.alura.com.br/course/estrutura-de-dados/task/6077 --> Aula 4 -