Opa, pessoal
Alguém poderia me auxiliar com a implementação de uma árvore AVL no código que estou escrevendo?
Separei um código pronto que encontrei no Javatpoint [https://www.javatpoint.com/avl-tree-program-in-java], mas não estou sabendo como inserir no que já escrevi.
Além disso, há outros problemas:
Um deles é referente ao próprio código da árvore AVL: a IDE encontra dois erros de return no código do Javatpoint – vou linkar imagens dos erros.
Outro problema, um pouco mais simples, é referente ao programa retornar para o menu inicial.
O programa, em resumo, é um cadastro de usuários, onde [1] o administrador insere os dados e cada usuário registrado vai pra uma ArrayList. A partir daí, preciso implementar uma árvore AVL pra [2] buscar os usuários registrados. Outra coisa que o sistema precisa entregar é [3] uma lista de usuários de acordo com data e horário. No caso, como uma ordem de chegada num hospital: uma lista por ordem de quem será atendido primeiro, segundo, terceiro, etc.
Quando rodo o programa, consigo cadastrar as informações, mas, no final, além de não parecer que estão sendo alocadas como objetos no ArrayList, tbm gera um problema de retorno para o menu inicial, onde o administrador escolhe se: [a] faz um novo cadastro; [b] faz uma busca dos usuários cadastrados; [c] acessa a lista de atendimento; ou [d] sai do sistema.
Enfim, não sei se consegui explicar mto bem e acho que talvez seja bastante coisa, mas estou perdido faz um tempo e realmente preciso de ajuda…
Os erros do código da árvore AVL:
O meu código:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Scanner;
public class MNT {
private static final int CADASTRO = 1;
private static final int BUSCA = 2;
private static final int ATENDIMENTO = 3;
private static final int SAIR = 4;
public static class Registro {
private static boolean iniciarSistema;
private String registroDoNome;
private String registroDoNascimento;
private String registroDoEmail;
private String registroDoTelefone;
private String registroDoFuncionario;
private String registroDoVisitante;
private String registroDoVoluntario;
private String registroDoDoador;
private String registroDoAtendido;
public Registro(String registroDoNome, String registroDoNascimento, String registroDoEmail, String registroDoTelefone, String registroDoFuncionario, String registroDoVisitante, String registroDoVoluntario, String registroDoDoador, String registroDoAtendido) {
// this.registroDaData = registroDaData;
this.registroDoNome = registroDoNome;
this.registroDoNascimento = registroDoNascimento;
this.registroDoEmail = registroDoEmail;
this.registroDoTelefone = registroDoTelefone;
this.registroDoFuncionario = registroDoFuncionario;
this.registroDoVisitante = registroDoVisitante;
this.registroDoVoluntario = registroDoVoluntario;
this.registroDoDoador = registroDoDoador;
this.registroDoAtendido = registroDoAtendido;
}
public static void setIniciarSistema(boolean iniciarSistema) {
Registro.iniciarSistema = iniciarSistema;
}
public String getRegistroDoNome() {
return registroDoNome;
}
public void setRegistroDoNome(String registroDoNome) {
this.registroDoNome = registroDoNome;
}
public String getRegistroDoNascimento() {
return registroDoNascimento;
}
public void setRegistroDoNascimento(String registroDoNascimento) {
this.registroDoNascimento = registroDoNascimento;
}
public String getRegistroDoEmail() {
return registroDoEmail;
}
public void setRegistroDoEmail(String registroDoEmail) {
this.registroDoEmail = registroDoEmail;
}
public String getRegistroDoTelefone() {
return registroDoTelefone;
}
public void setRegistroDoTelefone(String registroDoTelefone) {
this.registroDoTelefone = registroDoTelefone;
}
public String getRegistroDoFuncionario() {
return registroDoFuncionario;
}
public void setRegistroDoFuncionario(String registroDoFuncionario) {
this.registroDoFuncionario = registroDoFuncionario;
}
public String getRegistroDoVisitante() {
return registroDoVisitante;
}
public void setRegistroDoVisitante(String registroDoVisitante) {
this.registroDoVisitante = registroDoVisitante;
}
public String getRegistroDoVoluntario() {
return registroDoVoluntario;
}
public void setRegistroDoVoluntario(String registroDoVoluntario) {
this.registroDoVoluntario = registroDoVoluntario;
}
public String getRegistroDoDoador() {
return registroDoDoador;
}
public void setRegistroDoDoador(String registroDoDoador) {
this.registroDoDoador = registroDoDoador;
}
public String getRegistroDoAtendido() {
return registroDoAtendido;
}
public void setRegistroDoAtendido(String registroDoAtendido) {
this.registroDoAtendido = registroDoAtendido;
}
public static void main(String[] args) {
ArrayList<Registro> registros = new ArrayList<Registro>();
setIniciarSistema(true);
while (iniciarSistema) {
iniciarMenu();
}
}
private static void iniciarMenu() {
ArrayList<Registro> registros = new ArrayList<Registro>();
Scanner entradaDeOpcaoDoMenu = new Scanner(System.in);
int opcaoDoMenuSelecionada;
System.out.println("\n1) CADASTRO");
System.out.println("2) BUSCA");
System.out.println("3) ATENDIMENTO");
System.out.println("4) SAIR");
System.out.print("\nInforme sua opção: ");
opcaoDoMenuSelecionada = Integer.parseInt(entradaDeOpcaoDoMenu.nextLine());
switch (opcaoDoMenuSelecionada) {
case CADASTRO:
adicionarAoRegistro(registros);
break;
case BUSCA:
//
break;
case ATENDIMENTO:
// Collections.sort(ArrayList<Registro> registros):
System.out.println("\nOrdem de atendimento: " + registros);
entradaDeOpcaoDoMenu.close();
setIniciarSistema(false);
break;
case SAIR:
System.out.println("\n=> DESLIGANDO SISTEMA");
entradaDeOpcaoDoMenu.close();
setIniciarSistema(false);
break;
default:
System.out.println("=> OPÇÃO INVÁLIDA");
break;
}
}
private static void adicionarAoRegistro(ArrayList<Registro> listaDeRegistros) {
Scanner teclado = new Scanner(System.in);
String dataDeAgendamento = new String();
Date dataDoSistema = new Date();
SimpleDateFormat formatoDaData = new SimpleDateFormat("dd/MM/yyyy");
formatoDaData.setLenient(false);
boolean validarData = false;
System.out.println("\n================\n" + " INFORME A DATA\n" + "================\n");
while (validarData == false) {
System.out.println("Data de agendamento (DD/MM/AAAA): ");
dataDeAgendamento = teclado.nextLine();
System.out.println();
try {
dataDoSistema = formatoDaData.parse(dataDeAgendamento);
System.out.println("=> VALORES VÁLIDOS\n");
System.out.println("Data no sistema: " + dataDoSistema);
validarData = true;
} catch (ParseException e) {
System.out.println("=> VALORES INVÁLIDOS\n");
}
}
SimpleDateFormat dataFormatada = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");
System.out.println("Data e horário do agendamento:\n " + dataFormatada.format(dataDoSistema));
// teclado.close();
System.out.println("\n===================\n" + " CADASTRO DE DADOS\n" + "===================\n");
System.out.print("Nome completo: ");
String registroDoNome = (teclado.nextLine());
System.out.print("Data de nascimento: ");
String registroDoNascimento = (teclado.nextLine());
System.out.print("E-mail: ");
String registroDoEmail = (teclado.nextLine());
System.out.print("Telefone: ");
String registroDoTelefone = (teclado.nextLine());
System.out.println("\n===================================\n" + " Responda apenas com 'Sim' ou 'Não'\n" + "===================================\n");
System.out.print("Funcionário: ");
String registroDoFuncionario = (teclado.nextLine());
System.out.print("Visitante: ");
String registroDoVisitante = (teclado.nextLine());
System.out.print("Voluntário: ");
String registroDoVoluntario = (teclado.nextLine());
System.out.print("Doador: ");
String registroDoDoador = (teclado.nextLine());
System.out.print("Atendido: ");
String registroDoAtendido = (teclado.nextLine());
System.out.println("\n===================\n" + " DADOS CADASTRADOS\n" + "===================\n");
System.out.println("Nome completo: " + registroDoNome);
System.out.println("Data de nascimento: " + registroDoNascimento);
System.out.println("E-mail: " + registroDoEmail);
System.out.println("Telefone: " + registroDoTelefone);
System.out.println("----------------");
System.out.println("Funcionário: " + registroDoFuncionario);
System.out.println("Visitante: " + registroDoVisitante);
System.out.println("Voluntário: " + registroDoVoluntario);
System.out.println("Doador: " + registroDoDoador);
System.out.println("Atendido: " + registroDoAtendido);
System.out.println("\n===================\n");
// System.out.print("\n__________________________________");
listaDeRegistros.add(new Registro(registroDoNome, registroDoNascimento, registroDoEmail, registroDoTelefone, registroDoFuncionario, registroDoVisitante, registroDoVoluntario, registroDoDoador, registroDoAtendido));
teclado.close();
}
}
}
P.S.: Desculpa pela bagunça no código, ainda tô aprendendo a organizar melhor