Duvidas com método de consuta por nome

6 respostas
guilherme178

Fala pessoal, blz?

Estou tendo uns probleminhas pra conseguir fazer uma consulta em uma ArrayList através de nome.
Eu criei uma classe chamada Interface que recebe do usuário as informações e chama os métodos da classe Cadastro que realiza as operações. Quando eu digito um nome para ser realiado a consulta, ao inves de me retornar o nome encontrado ou uma exceção dizendo que o nome nao existe, ele simplesmente volta para o menu principal!!!
O que pode estar acontecendo

Vou colocar aqui os métodos.

Método ConsultaPacienteNome da classe Interface:

private static void consultaPacienteNome()
	{
		try
		{
			String nome;
			Scanner entrada = new Scanner(System.in);
			Cadastro cadastro = new Cadastro();
			
			System.out.print("\nCONSULTA PACIENTE POR NOME:\n");
			System.out.print("\nNome: ");
			nome = entrada.nextLine();
			
			System.out.println(cadastro.consultaPacienteNome(nome));
			entrada.nextLine();			
		}
		catch (Exception e)
		{
			e.getMessage();			
		}		
	}

Agora o metodo consultaPacienteNome da classe cadastro

public Paciente consultaPacienteNome(String nome) throws SisDenException
	{
		for(Paciente objPaciente : listaPacientes)
		{
			if(objPaciente.getNome().equalsIgnoreCase(nome))
			{				
				return objPaciente;				
			}				
		}
		throw new SisDenException("Paciente não encontrado!");
	}

e alguem souber de algo eu agradeço.

6 Respostas

ViniGodoy

Parece certo, como você está inserindo os dados nessa lista?

guilherme178

Olá.

Meu metodo de inclusão é o seguinte.

Método cadastroPaciente da classe interface

private static void cadastroPaciente()
	{
		try
		{
			String nome;
			String endereco;
			String sexo;
			int idade;
			String cpf;
			String telefone;
			String diagnostico;
			String tratamento;
			int codigoTratamento;
			String profissionalResponsavel;
			String especialidade;

			Cadastro cadastro = new Cadastro();
			Scanner entrada = new Scanner(System.in);
			
			System.out.println("\nCADASTRO DE PACIENTE:\n");
			System.out.print("Nome: ");	nome = entrada.nextLine().trim();
			System.out.print("Endereço: "); endereco = entrada.nextLine().trim();					
			System.out.print("Sexo: ");	sexo = entrada.nextLine().trim();			
			System.out.print("Idade: "); idade = Integer.parseInt(entrada.nextLine().trim());			
			System.out.print("CPF (formato [CPF removido]): "); cpf = entrada.nextLine();
			while(cadastro.validaCpf(cpf) == false || cpf == null)
			{
				System.out.println("Cpf inválido, verifique os pontos e/ou hífens e tente novamente!");
				cpf = entrada.nextLine();
			}
			
			System.out.println("Telefone (formato 0000-0000): "); telefone = entrada.nextLine().trim();
			while(cadastro.validaTelefone(telefone) == false)
			{
				System.out.println("Telefone inválido, verifique os dados e tente novamente!");
				telefone = entrada.nextLine();
			}
			
			System.out.print("Diagnóstico: "); diagnostico = entrada.nextLine().trim();			
			System.out.print("Tratamento: "); tratamento = entrada.nextLine().trim();
			System.out.print("Código do tratamento: ");	codigoTratamento = Integer.parseInt(entrada.nextLine().trim());
			System.out.print("Dentista responsável: ");	profissionalResponsavel = entrada.nextLine().trim();
			System.out.print("Especialidade: "); especialidade = entrada.nextLine().trim();
			
			Paciente objPaciente = new Paciente(nome, endereco, sexo, idade, cpf, telefone, diagnostico, tratamento, codigoTratamento, profissionalResponsavel, especialidade);
			
			cadastro.incluirPaciente(objPaciente);
		}
		catch (Exception e)
		{
			e.getMessage();
		}
	}

método incluiPaciente da classe Cadastro

public void incluirPaciente(Paciente objPaciente) throws SisDenException
	{
		Scanner digita = new Scanner(System.in);
		for(Paciente obj : listaPacientes)
		{
			if(obj.getCpf().equals(objPaciente.getCpf()))
			{
				throw new SisDenException("Paciente já cadastrado, confira os dados e tente novamente!");
			}			
		}
		listaPacientes.add(objPaciente);
		System.out.println("\nPaciente cadastrado com sucesso, pressione qualquer tecla para continuar!");
		digita.nextLine();		
	}

Eu consigo incluir novos pacientes e armazeno nos ArrayLists e no método de consulta por nome adicionei um if para testar se a ArrayList esta vazia, mas sempre que faço a consulta, agora ela acusa que esta vazia.
Tentei incluir um paciente exatamente igual a um ja cadastrado e o programa aceitou, será que nao esta incluindo no ArrayList??

Abraços.

H

Oi,

Examinando o código, acho que tem duas observações:

  1. No método da classe Interface vc escreveu:
catch (Exception e)  
    {  
        e.getMessage();           
    }

a exceção retorna o getMessage() mas você descarta a informação. Não seria mais correto:

catch (Exception e)  
    {  
        System.err.println(e.getMessage()); 
    }
  1. Outro detalhe esta na classe Cadastro. Nela, o método de consulta retorna um objeto do tipo Paciente:
public Paciente consultaPacienteNome(String nome) throws SisDenException

Mas em Interface, voce parece tratar o retorno do método como trataria uma String:

System.out.println(cadastro.consultaPacienteNome(nome));

Para dar certo você tem que sobreescerver o método toString() em Paciente, ou mudar o valor de retorno de em consultaPacienteNome().

Espero ter ajudado.

Hel_all

ViniGodoy

Todos os métodos estão na mesma classe? Você cria o listaPaciente com new uma vez só?

ViniGodoy

Melhor ainda é ao invés de fazer:

System.err.println(e.getMessage());

Fazer:

e.printStackTrace();
H

Melhor ainda é ao invés de fazer:
System.err.println(e.getMessage());

Fazer:

e.printStackTrace();

Sem dúvida!

Uma outra possibilidade que vi é, na consultaPacienteNome da classe Interface, ao invès de

System.out.println(cadastro.consultaPacienteNome(nome));

poderia ser:

System.out.println(cadastro.consultaPacienteNome(nome).getNome());

Isso também seria possível…

Criado 22 de janeiro de 2013
Ultima resposta 22 de jan. de 2013
Respostas 6
Participantes 3