Gente, me ajuda.
Estou precisando pra um trabalho da faculdade.
No meu for, quero que caso a pessoa tenha digitado errado algum exame que não está na lista, o for repete, até a pessoa digitar algum exame na lista, eu tentei adicionar um Do… While para controlar isso, mas não está funcionando, espero que tenha dado para entender, segue o código.
package bin;
import java.util.ArrayList;
import java.util.Scanner;
public class Principal {
static ArrayList<Paciente> pacientes = new ArrayList<>();
static ArrayList<Consulta> consultas = new ArrayList<>();
static ArrayList<Medico> medicos = new ArrayList<>();
static ArrayList<Exame> exames = new ArrayList<>();
public static void main(String[] args) {
int i;
Scanner in = new Scanner(System.in);
medicos.add(new Medico("Carlos Rena"));
medicos.add(new Medico("Amanda Silva"));
medicos.add(new Medico("Adriana Castro"));
medicos.add(new Medico("João Guilherme"));
medicos.add(new Medico("Lucila Ferreira"));
medicos.add(new Medico("Leonardo Aurelio"));
medicos.add(new Medico("Felipe Farias"));
exames.add(new Exame("Cardiologista"));
exames.add(new Exame("Dentista"));
exames.add(new Exame("Urologista"));
exames.add(new Exame("Clinica Geral"));
exames.add(new Exame("Ginecologista"));
exames.add(new Exame("Ortopedista"));
exames.add(new Exame("Dermatologista"));
System.out.println("Bem-Vindo ao cadastro de consulta");
System.out.println("---------------------------------");
System.out.println("Informe seu nome");
String nome = in.nextLine();
pacientes.add(new Paciente(nome)); //Ao se informar um nome se adiciona o Paciente
System.out.println("Selecione o exame");
System.out.println(exames); //Lista os exames
String tipoExame = in.nextLine();
do {
for (i = 0; i < exames.size();i++) { // For para percorrer a lista e comparar o exame selecionado se realmente está na listaG
if(tipoExame.equals(exames.get(i).getTipoExame())) {
System.out.println("OK");
break;
}else if (i == exames.size() -1){ //Caso não possua o exame digitado
System.out.println("Exame não encontrado, escolha um dos exames citados");
}
}
}while(i == exames.size() -1);
}
}
O equal não é melhor forma de verificar strings, tente matches() ou indexOf() ja tive problemas com algumas funções java na hora de comparar alguns char então acredito que o mais indicado seja a função matches
Na verdade o tratamento do java sobre char é bem debilitado, por isso funções como equal e indexof que comparam os bytes do caracetere apresentam falhas em interpretação de alguns caraceteres, principalmente por causa da origem do char.
Não sei se durante os calculos dos bytes ou na forma como é armazenado o char, 2 textos iguais aparecem como diferentes usando essa função isso ocorre normalmente por causa dos caracteres especiais, diria que tem alguma relação com tipo de formatação tipo utf-8 ou Ascii, mas não estou falando de carregar textos externo, e sim de texto digitados dentro do codigo font do aplicativo (deveriam estar na mesma formatação mas na prática acontece muitas falhas), disse que a função não funciona sempre por experiência propria
Na verdade não estou errado sugeri usar essas classes para validar justamente porque o equal pode afirmar que 2 strings iguais são diferentes por uma series de fatores ja tive muita dor de cabeça com isso justamente quando tinha caracteres especiais, por recomendação digo que para validar uma frase com mais sucesso voce pode utilizar indexOf() ou match isso por causa do modo como essas classes tratam o String.
Na prática
"\\b" != ‘\’+’\b’
Esse tipo de falha acontece no equal, não deveria mas acontece.
Alinha que escrevi era só uma representação de um dos erros, e nao um erro em si, abandonei a muito tempo usar equal nesse tipo de objeto e meu estilo de solução funciona.
A propria função indexOf as vezes não acha o elemento dentro do texto, e isso não tem haver com erro de inserção de valores, não estarei continuando o assunto porque não estou querem ficar testando esses casos denovo.
Para você ter uma ideia tinha epoca que eu usava algo tipo
char c = ‘¥’;
if( c.equal(‘¥’)){
Muitas vezes obtia o char de algum lugar na hora de testar o char no system.out estava perfeito quando passava no equal falava que era diferente.
Não tenho interesse em ficar criando um baita codigo tentando identificar os erros de tratamentos de primitivos do java, na epoca que mechia pelas funções principais tipo equal era sempre cada linha um erro era hora tentando mexer no texto para parar o erro interpretação hoje uso uma biblioteca propria minha que funciona sem um unico erro de comparação.
Instanciei a classe Principal para ter um objeto dela e poder invocar o método não-estático executar(), dessa forma não precisa ficar criando só variáveis e métodos estáticos.
while (true) { // repete infinitamente
System.out.println(“Selecione o exame”);
System.out.println(exames);
String tipoExame = in.nextLine();
// para cada objeto exame que existe dentro da lista de exames
for (Exame exame : exames) {
// verifica se o nome digitado é igual ao nome do exame
if (tipoExame.equalsIgnoreCase(exame.getTipoExame())) {
// sai desse método retornando o objeto exame e quebrando o laço infinito
return exame;
}
}
System.out.println(“Exame não encontrado, escolha um dos exames citados”);
}
Acho que você não está falando de Java, se estiver, deve estar há algum tempo sem programar. char é um tipo primitivo, não possui métodos e os tipos não primitivos possuem um método equals…
Mas pelo que você fala, receio ser somente um problema de character encoding entre o seu compilador e o ambiente de execução de seu programa.
Em Java não é legal escrever código assim char c = '¥';.
Quando você quer utilizar símbolos especiais, utilize o literal '\uXXXX onde XXXX é o código unicode do símbolo.