Olá pessoal, estou tentando implementar uma lista simplesmente encadeada! Vou postar os códigos por classes pra ficar mais fácil a compreensão! Estou com dificuldade para implementar os métodos de excluir o objeto (aerolito) por nome e PRINCIPALMENTE não estou conseguindo exibir minha lista de forma ordenada de acordo com a altura dos aerolitos!
Classe de Aerolito:
public String nome;
public double altura;
public double largura;
public double comprimento;
public Aerolito(String n, double a, double l, double c){
this.nome = n;
this.altura = a;
this.largura = l;
this.comprimento = c;
}
Classe de Nodo:
public Aerolito objeto;
public Nodo proximo;
public Nodo(Aerolito aerolito){
this.objeto = aerolito;
this.proximo = null;
}
E minha classe da Lista:
public Nodo primeiro;
public Lista() {
this.primeiro = null;
}
/**
* Método que adiciona um novo elemento na lista.
*/
public void adicionar(Aerolito a) {
Nodo novo = new Nodo(a);
if (this.primeiro == null) {
this.primeiro = novo;
} else {
Nodo atual = this.primeiro;
while (atual.proximo != null) {
atual = atual.proximo;
}
atual.proximo = novo;
}
}
/**
* Método que remove da lista TODOS os aerolitos com o nome indicado.
*
* @param nome
*/
public void remover(String nome) {
if (this.primeiro == null) {
System.out.println("Lista vazia!");
} else {
Nodo atual = this.primeiro;
while (atual != null) {
if (atual.objeto.nome.equals(nome)) {
}
atual = atual.proximo;
}
}
}
/**
* Método que retorna os aerolitos do menor para o maior.
*
* @return String lista de aerolitos que segue o seguinte formato:
*
* 1) cada aerolito será mostrado com seu nome entre colchetes, por exemplo:
* [Aeroberto]
*
* 2) o String retornado terá todos os aerolitos sem qualquer separador, por
* exemplo: [Aeroan][Aeroberto][Aerowski]
*
*/
public String mostrar() {
String aerolitos = "";
if (this.isVazia()) {
return aerolitos;
} else {
Nodo atual = this.primeiro;
Nodo menor = ordenar(atual, atual.proximo);
Nodo aux = atual;
while (aux != null) {
while (atual != null) {
menor = ordenar(menor, atual);
if (atual.proximo == null) {
break;
}
atual = atual.proximo;
}
aerolitos += "[" + menor.objeto.nome + "]";
removeUm(menor);
if (aux.proximo == null) {
break;
}
aux = aux.proximo;
}
}
return aerolitos;
}
public void removeUm(Nodo menor) {
Nodo atual = this.primeiro;
while (atual != null) {
if (atual.proximo == null) {
break;
}
if (atual.proximo.objeto.altura == menor.objeto.altura) {
atual = menor.proximo;
menor = null;
}
atual = atual.proximo;
}
}
/**
*
* @return True caso a lista esteja vazia e false caso ocorra o contrario
*/
public boolean isVazia() {
if (this.primeiro == null) {
return true;
} else {
return false;
}
}
private Nodo ordenar(Nodo pri, Nodo seg) {
if (pri.objeto.altura < seg.objeto.altura) {
return pri;
}
return seg;
}
public static void main(String[] args) {
Lista sla = new Lista();
Aerolito a1 = new Aerolito("a1", 2.5, 2.2, 2.2);
Aerolito a2 = new Aerolito("a2", 2.2, 2.2, 2.2);
Aerolito a3 = new Aerolito("a3", 2.3, 2.2, 2.2);
Aerolito a4 = new Aerolito("a4", 2.4, 2.2, 2.2);
Aerolito a5 = new Aerolito("a5", 2.1, 2.2, 2.2);
sla.adicionar(a1);
sla.adicionar(a2);
sla.adicionar(a3);
sla.adicionar(a4);
sla.adicionar(a5);
System.out.println(sla.mostrar());
}
Lembrando que o método de remover, eu devo remover todos os elementos que contenham nome igual ao passado por parametro e o método de mostrar eu tenho que mostrar o nome de todos aerolitos da lista (ordenados por altura)… ISSO ME BUGOU A MENTE DEMAIS!!