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!
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;
}
}