// Boa noite a todos, que pode me ajudar a resolver minha duvida porque não imprime Nome e Idade
//Estou usando a implementação de uma lista ligada do curso Algoritmos e Estruturas de Dados no Java CS-14 da Caelum, onde eu tenho um objeto Aluno e atribuo um nome e sua idade, mais na hora de mostrar os atributos só aparece o nome do Aluno porque a idade não é mostrada.
Alguem pode me dar uma luz.
class Celula {
private Celula proxima;
private Object elemento;
private Celula anterior;
public Celula(Celula proxima, Object elemento) {
this.proxima = proxima;
this.elemento = elemento;
}
public Celula(Object elemento) {
this.elemento = elemento;
}
public void setProxima(Celula proxima) {
this.proxima = proxima;
}
public Celula getProxima() {
return proxima;
}
public Object getElemento() {
return elemento;
}
public Celula getAnterior() {
return anterior;
}
public void setAnterior(Celula anterior) {
this.anterior = anterior;
}
}
class ListaLigada {
private Celula primeira;
private Celula ultima;
private int totalDeElementos = 0;
public void adiciona(Object elemento) {
if (this.totalDeElementos == 0) {
this.adicionaNoComeco(elemento);
} else {
Celula nova = new Celula(elemento);
this.ultima.setProxima(nova);
nova.setAnterior(this.ultima);
this.ultima = nova;
this.totalDeElementos++;
}
}
public void adiciona(int posicao, Object elemento) {
if (posicao == 0) {
this.adicionaNoComeco(elemento);
} else if (posicao == this.totalDeElementos) {
this.adiciona(elemento);
} else {
Celula anterior = this.pegaCelula(posicao - 1);
Celula proxima = anterior.getProxima();
Celula nova = new Celula(anterior.getProxima(), elemento);
nova.setAnterior(anterior);
anterior.setProxima(nova);
proxima.setAnterior(nova);
this.totalDeElementos++;
}
}
public Object pega(int posicao) {
return this.pegaCelula(posicao).getElemento();
}
private Celula pegaCelula(int posicao) {
if (!this.posicaoOcupada(posicao)) {
throw new IllegalArgumentException("Posição não existe");
}
Celula atual = primeira;
for (int i = 0; i < posicao; i++) {
atual = atual.getProxima();
}
return atual;
}
private boolean posicaoOcupada(int posicao) {
return posicao >= 0 && posicao < 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.getProxima();
}
return false;
}
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++;
}
public void remove(int posicao) {
if (!this.posicaoOcupada(posicao)) {
throw new IllegalArgumentException("Posição não existe");
}
if (posicao == 0) {
this.removeDoComeco();
} else if (posicao == totalDeElementos -1 ) {
this.removeDoFim();
} else {
Celula anterior = this.pegaCelula(posicao -1);
Celula atual = anterior.getProxima();
Celula proxima = atual.getProxima();
anterior.setProxima(proxima);
proxima.setAnterior(anterior);
this.totalDeElementos--;
}
}
public void removeDoComeco() {
if (!this.posicaoOcupada(0)) {
throw new IllegalArgumentException("Posição não existe");
}
this.primeira = this.primeira.getProxima();
//this.primeira.setAnterior() = null;
this.totalDeElementos--;
if (this.totalDeElementos == 0) {
this.ultima = null;
}
}
public void removeDoFim() {
if (!this.posicaoOcupada(this.totalDeElementos - 1)) {
throw new IllegalArgumentException("Posição não existe");
}
if (this.totalDeElementos == 1) {
this.removeDoComeco();
} else {
Celula penultima = this.ultima.getAnterior();
penultima.setProxima(null);
this.ultima = penultima;
this.totalDeElementos--;
}
}
public String toString() {
if (this.totalDeElementos == 0) {
return "[]";
}
StringBuilder builder = new StringBuilder("[");
Celula atual = primeira;
for (int i = 0; i < this.totalDeElementos -1; i++) {
builder.append(atual.getElemento());
builder.append(", ");
atual = atual.getProxima();
}
builder.append(atual.getElemento());
builder.append("]");
return builder.toString();
}
}
class Aluno {
public String nome;
public int idade;
int getIdade() {
return idade;
}
void setIdade(int idade) {
this.idade = idade;
}
String getNome() {
return nome;
}
void setNome(String nome) {
this.nome = nome;
}
public String toString() {
return this.nome;
}
boolean equals(Aluno o) {
Aluno outro = (Aluno)o;
return this.nome.equals(outro.nome);
}
}
//Aqui realizei o teste do método adicionaNoFim()
//Onde eu tenho um objeto Aluno e atribuo um nome e sua idade, mais na hora de mostrar os atributos só aparece o nome do Aluno
class TesteAdicionaNoFim {
public static void main(String[] args) {
Aluno a1 = new Aluno();
Aluno a2 = new Aluno();
a1.setNome("Rafael");
a1.setIdade(15);
a2.setNome("Paulo");
a2.setIdade(20);
ListaLigada lista = new ListaLigada();
lista.adiciona(a1);
lista.adiciona(a2);
System.out.println(lista);
System.out.println(lista.tamanho());
}
}