Bom dia, galera.
Estou tentando fazer uma lista encadeada com String, mas para mostrar em ordem alfabetica precisaria fazer um compareTo e o meu codigo está dando um erro no metodo, abaixo está o codigo. Grato pela ajuda.
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package listaordenada;
/**
*
* @author gustavo.mariano
*/
import javax.swing.*;
public class ListaOrd {
private Node comeco; //Nó do começo da Lista
//Inicializa uma Lista no estado vazia (construtor)
public ListaOrd() {
comeco = null;
}
//Verifica se a lista está vazia
public boolean isNull() {
return(comeco==null);
}
//Método que converte um objeto em float para poder ser comparado
private int emFloat(Object x) {
Node a = comeco;
String b = (String) x;
int resp = a.compareTo(b);
return resp;
}
//Insere um elemento na Lista Ordenada
public void ins(Object x) {
Node novo = new Node();
Node aux;
novo.setDado(x);
//Se a lista estiver vazia ou o elemento for menor que o primeiro
if(isNull() || emFloat(x) < emFloat(comeco.getDado()) ) {
novo.setProx(comeco);
comeco = novo;
}
else {
aux = comeco;
while(aux.getProx()!=null && emFloat(x) > emFloat(aux.getProx().getDado()))
aux = aux.getProx();
novo.setProx(aux.getProx());
aux.setProx(novo);
}
}
//Imprime o conteúdo da Lista
public void print() {
if(!isNull()) {
Node aux;
aux = comeco;
String saida = "";
while(aux!=null){
saida += aux.getDado().toString() + ", ";
aux = aux.getProx();
}
JOptionPane.showMessageDialog(null,"L:["+saida+"]");
}
else
System.out.println("Lista Vazia!");
}
//Remove um elemento da lista e retorna true se conseguiu remover e false caso não
public boolean rem(Object x) {
Node aux;
//Se a lista estiver vazia ou o elemento for menor que o primeiro, não existe
if(isNull() || emFloat(x) < emFloat(comeco.getDado()) )
return false;
else {
//Se for o primeiro elemento
if(emFloat(x)==emFloat(comeco.getDado())) {
comeco = comeco.getProx();
return true;
}
//Se for maior que o primeiro, achar a posição
else {
aux = comeco;
//Navega até aposição onde deveria encontrar
while(aux.getProx() != null && emFloat(x) > emFloat(aux.getProx().getDado()))
aux = aux.getProx();
//Se encontrou
if(aux.getProx() != null && emFloat(x) == emFloat(aux.getProx().getDado())) {
aux.setProx(aux.getProx().getProx());
return true;
}
else //Não encontrou o elemento
return false;
}
}
}
//Busca por um elemento na lista e retornao nó onde encontrou
public Node find(Object x) {
Node aux = comeco;
//Navega até o nó de interesse
while(aux !=null && emFloat(x) > emFloat(aux.getDado()) )
aux = aux.getProx();
//Se achou o elemento
if(aux !=null && emFloat(x) == emFloat(aux.getDado()))
return aux;
else
return null;
}
public static void main(String[] args) {
// TODO code application logic here
}
}
Está também o codigo Node que e o nó:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package listaordenada;
/**
*
/*
* Definindo a estrutura de um nó (Lista Encadeada)
*/
public class Node
{
private Object dado; //Dado a ser armazenado no nó
private Node prox; //Referência para o próximo nó
//Devolve o conteúdo do nó
public Object getDado()
{
return dado;
}
//Atribui um valor ao conteúdo do nó
public void setDado(Object novovalor)
{
dado = novovalor;
}
//Devolve a referência do próximo nó
public Node getProx()
{
return prox;
}
//Atribui uma referência para o próximo nó
public void setProx(Node novoprox)
{
prox = novoprox;
}
}