@AnnaGiuliaGatti
boa tarde, faça as adequações necessárias,segue exemplo:
Classe principal
import java.util.Scanner;
public class Atendimento {
public static void main(String[] args) {
new Atendimento().start();
}
void start() {
try {
new UnidadeAtendimento(new Scanner(System.in));
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Classe da fila
import lombok.AllArgsConstructor;
import java.util.ArrayList;
import java.util.List;
@AllArgsConstructor
public class Fila {
private String nome;
private final List<Paciente> pacientes = new ArrayList();
public String getNome() {
return nome;
}
public Paciente getProximo() {
return pacientes.size() > 0 ? pacientes.get(0) : null;
}
public int getQuantidadePacientes() {
return pacientes.size();
}
public void addPaciente(Paciente paciente) {
pacientes.add(paciente);
}
public void removerPaciente(Paciente paciente) {
pacientes.remove(pacientes.indexOf(paciente));
}
}
Classe com perguntas e respostas para covid-19
import lombok.Data;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
@Data
public class Covid19 {
private String[] perguntas = {
"Sente dor de cabeça ou mal-estar geral?",
"Sente dor muscular generalizada?",
"Sente cansaço excessivo?",
"Tem congestão nasal ou cor,iza?",
"Está com tosse intensa, especialmente seca?",
"Sente dor intensa ou pressão persistente no peito?",
"Tem febre acima de 38ºC?",
"Sente dificuldade para respirar ou falta de ar?",
"Está com os lábios ou rosto ligeiramente azulados?",
"Está com dor de garganta?",
"Esteve em algum local com elevado número de casos de COVID-19, nos últimos 14 dias?",
"Acha que teve contato com alguém que possa estar com COVID-19, nos últimos 14 dias?"
};
private Map<Integer, Boolean> respostas = new HashMap();
public void executarQuestionario(Scanner input) {
for (int i = 0; i < perguntas.length; i++) {
System.out.print(perguntas[i].concat(" [S/N] > "));
respostas.put(i, "S".equalsIgnoreCase(input.next()));
}
}
public boolean verificarNecessidadeInternacao() {
int contagemPerguntasChaves = 0;
for (Map.Entry<Integer, Boolean> entry : respostas.entrySet()) {
if (Arrays.asList(0, 1, 2, 5, 6, 7, 8, 10, 11).contains(entry.getKey())) {
contagemPerguntasChaves += entry.getValue() ? 1 : 0;
}
}
if (contagemPerguntasChaves >= 4) {
System.out.println("Internar paciente");
return true;
} else {
System.out.println("Liberar paciente");
return false;
}
}
}
Classe com a lógica da unidade de atendimento
import java.util.Scanner;
public class UnidadeAtendimento {
private Paciente[] internacoes;
private Fila filaAtendimento = new Fila("Atendimento");
private Fila filaInternacao = new Fila("Fila para internação");
public UnidadeAtendimento(Scanner input) {
cadastrarVagasInternacao(input);
iniciarAtendimentos(input);
}
private void cadastrarVagasInternacao(Scanner input) {
System.out.print("Quantas vagas de internação vão disponibilizar: ");
internacoes = new Paciente[input.nextInt()];
}
private void iniciarAtendimentos(Scanner input) {
boolean encerrar = false;
while (!encerrar) {
switch (printMenuPrincipal(input)) {
case 1:
cadastrarPacientes(input);
break;
case 2:
atenderPaciente(input);
break;
case 3:
liberacaoVagaUnidade(input);
break;
case 4:
encerrar = true;
break;
default:
System.out.println("Opção inválida");
}
}
}
private void atenderPaciente(Scanner input) {
boolean continuarAtendimento = true;
while (continuarAtendimento) {
if (filaAtendimento.getQuantidadePacientes() > 0) {
Paciente paciente = filaAtendimento.getProximo();
Covid19 covid19 = new Covid19();
covid19.executarQuestionario(input);
if (covid19.verificarNecessidadeInternacao()) {
if (!verificarVagaInternacao(paciente)) {
filaInternacao.addPaciente(paciente);
System.out.println("Não há vagas para internação o paciente foi inserido em uma fila de espera");
} else {
System.out.println("O paciente foi internado seguindo protocolo para Covid-19");
}
}
filaAtendimento.removerPaciente(paciente);
System.out.print("Atender próximo paciente? [S/N] > ");
continuarAtendimento = verificarResposta(input.next());
} else {
continuarAtendimento = false;
System.out.println("Não há mais pacientes em espera para atendimento");
}
}
}
private void liberacaoVagaUnidade(Scanner input) {
System.out.print("Informe o CPF do paciente > ");
Long cpf = input.nextLong();
Paciente paciente = null;
for (int i = 0; i < internacoes.length; i++) {
paciente = internacoes[i];
if (paciente.getCpf().equals(cpf)) {
System.out.println(String.format("Paciente %s teve alta", paciente.getNome()));
internacoes[i] = null;
if (filaInternacao.getQuantidadePacientes() > 0) {
internacoes[i] = filaInternacao.getProximo();
System.out.println(String.format("Paciente %s que estava em fila de espera foi internado", internacoes[i].getNome()));
}
break;
}
}
if (paciente == null) {
System.out.println("Paciente não encontrado");
}
}
private void cadastrarPacientes(Scanner input) {
boolean cadastrar = true;
while (cadastrar) {
Paciente paciente = new Paciente();
System.out.print("Qual o nome do paciente > ");
paciente.setNome(input.next());
System.out.print("Qual o CPF do paciente (sem pontuações) > ");
paciente.setCpf(input.nextLong());
filaAtendimento.addPaciente(paciente);
System.out.print("Continuar cadastrando pacientes [S/N] > ");
cadastrar = verificarResposta(input.next());
}
}
private int printMenuPrincipal(Scanner input) {
System.out.print("\n-=-=-=-=-=-=Menu de Opções=-=-=-=-=-=-\n"
+ "1-Recepção de paciente\n"
+ "2-Atendimento de paciente\n"
+ "3-Liberação de vaga na unidade\n"
+ "4-Encerrar\n\nOpção > ");
return input.nextInt();
}
private boolean verificarResposta(String resposta) {
return "S".equalsIgnoreCase(resposta);
}
private boolean verificarVagaInternacao(Paciente paciente) {
for (int i = 0; i < internacoes.length; i++) {
if (internacoes[i] == null) {
internacoes[i] = paciente;
return true;
}
}
return false;
}
}