Encadeamento Duplo

Amigos,

Tenho uma classe que implementa o conceito de lista duplamente encadeada e vou armazenar objetos e seus atributos dentro dela.
Que acessar os atributos destes objetos dentro da lista via get e set, mas estou tendo dificuldades.

O que posso fazer nessa caso?

Obrigado!

E o que você já fez?

Tentei acessar os elementos via get e set, exemplo:

lista.getFirst().getNome();
lista.getElement().getNome();

Poderia postar o código da classe que implementa a lista? Só com o que você informou não irei conseguir ajudá-lo.

[code]class DNode {

private Animal element;
private DNode<Animal> next;
private DNode<Animal> previous;

public DNode(Animal element) {
    this.element = element;
    this.next = this.previous = null;
}

public Animal getElement() {
    return element;
}

public void setElement(Animal element) {
    this.element = element;
}

public DNode<Animal> getNext() {
    return next;
}

public void setNext(DNode<Animal> next) {
    this.next = next;
}

public DNode<Animal> getPrevious() {
    return previous;
}

public void setPrevious(DNode<Animal> previous) {
    this.previous = previous;
}

}

public class AnimalList {

private DNode<Animal> head;
private DNode<Animal> tail;
private int size;
private int pos;

public AnimalList() {
    head = tail = null;
    size = 0;
}

public void insereFrente(Animal animal) {
    DNode<Animal> n = new DNode<>(animal);
    if (head == null) {
        head = tail = n;
    } else {
        head.setPrevious(n);
        n.setNext(head);
        head = n;
    }
    size++;
}

public Animal getFirst() {
    return head.getElement();
}

public void mostraLista() {
    DNode<Animal> current = head;
    while (current != null) {
        System.out.println(current.getElement());
        current = current.getNext();
    }
}

public int getSize() {
    return size;
}

}[/code]

As classe DNode e AnimalList estão corretas. Você deve está setando cópias dos objetos e não os objetos em si. Mostre como os objetos da lista estão sendo setados.

[code]public class Teste {

public static void main(String[] args) {

    AnimalList LISTA = new AnimalList();

    Animal A = new Animal("Cachorro");

    LISTA.insereFrente(A);

    Animal B = new Animal("Vaca");

    LISTA.insereFrente(B);

     
    // AQUI DA ERRO: LISTA.getFirst().setNome("Passaro");
    

    LISTA.mostraLista();

}

}[/code]

Cara, tem um erro no seu método mostraLista.

public void mostraLista() { DNode<Animal> current = head; while (current != null) { System.out.println(current.getElement()); // Aqui ele tenta chamar o método toString da classe Animal current = current.getNext(); } }

Você pode sobrescrever o método toString de Animal para retornar o nome:

@Override public String toString() { return name; }

Acho que isso resolve seu problema.

Ok.

Quanto a impressão dos valores na lista está funcionando.
O problema é setar um valor a um atributo de um objeto dentro da lista.

LISTA.getFirst().setNome("Passaro");

O código acima não compila ou não parece fazer sentido para o compilador.

Eu fiz esse teste aqui e funcionou:

[code]public static void main(String[] args) {
AnimalList animalList = new AnimalList();
Dog dog1 = new Dog();
dog1.setName(“Dog1”);

	Dog dog2 = new Dog();
	dog2.setName("Dog2");

	Dog dog3 = new Dog();
	dog3.setName("Dog3");

	animalList.insereFrente(dog3);
	animalList.insereFrente(dog2);
	animalList.insereFrente(dog1);

	animalList.getFirst().setName("Teste");
	System.out.println(animalList.getFirst().getName()); // imprime Teste
}[/code]
public class Dog {
	private String _name;

	public String getName() {
		return _name;
	}

	public void setName(String name) {
		_name = name;
	}
}

Funcionou!

Obrigado pela ajuda!