Aceitar a digitação de nome, o sexo, o peso, a idade e a altura, enquanto não for digitado “fim” no nome do paciente.
Ao digitar “fim” exiba um relatório contendo:
-a quantidade de pacientes.
-a média de idade dos homens.
-a quantidade de mulheres com altura entre 1,60 e 1,70 e peso acima de 70kg.
-a quantidade de pessoas com idade entre 18 e 25.
-o nome do paciente mais velho.
-o nome da mulher mais baixa.
Ta com dificuldade em qual parte?
Eu fiz assim, criei uma classe Paciente
com os seguintes atributos:
String nome
char sexo
double peso
int idade
double altura
Depois criei uma classe IO
para simplificar a entrada de dados pelo teclado e escrita no console.
Mas você pode fazer a entrada e saída de dados do seu jeito.
Com o auxílio dessas duas classes, escrevi o programa dessa forma:
import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import java.util.function.Predicate;
public class Exemplo {
public static void main(String[] args) {
Exemplo programa = new Exemplo();
programa.executar();
}
public void executar() {
List<Paciente> pacientes = new ArrayList<>();
Paciente paciente = null;
while ((paciente = lerPaciente()) != null) {
pacientes.add(paciente);
}
IO.printf("Quantidade de pacientes: %d%n", quantidade(pacientes));
IO.printf("Média de idade dos homens: %d%n", media(pacientes, pessoa -> pessoa.sexo == 'm'));
IO.printf("Quantidade de mulheres com altura entre 1,60 e 1,70 e peso acima de 70kg: %d%n", quantidade(pacientes, pessoa -> pessoa.sexo == 'f' && pessoa.altura >= 1.60 && pessoa.altura <= 1.60 && pessoa.peso > 70));
IO.printf("Quantidade de pessoas com idade entre 18 e 25: %d%n", quantidade(pacientes, pessoa -> pessoa.idade >= 18 && pessoa.idade <= 25));
IO.printf("Nome do paciente mais velho: %s%n", maior(pacientes, pessoa -> pessoa.idade).nome);
IO.printf("Nome da mulher mais baixa: %s%n", menor(pacientes, pessoa -> pessoa.altura, pessoa -> pessoa.sexo == 'f').nome);
}
private Paciente lerPaciente() {
String nome = IO.readString("Nome: ", texto -> !texto.trim().isEmpty());
if ("fim".equalsIgnoreCase(nome)) {
return null;
}
Paciente paciente = new Paciente();
paciente.nome = nome;
paciente.sexo = IO.readChar("Sexo: ", letra -> letra == 'm' || letra == 'f');
paciente.peso = IO.readDouble("Peso: ", numero -> numero > 0);
paciente.idade = IO.readInt("Idade: ", numero -> numero > 0);
paciente.altura = IO.readDouble("Altura: ", numero -> numero > 0);
return paciente;
}
private Paciente maior(List<Paciente> pacientes, Function<Paciente, Integer> funcao) {
Paciente maior = pacientes.get(0);
for (int i = 1; i < pacientes.size(); i++) {
Paciente paciente = pacientes.get(i);
if (funcao.apply(paciente) > funcao.apply(maior)) {
maior = paciente;
}
}
return maior;
}
private Object media(List<Paciente> pacientes, Predicate<Paciente> condicao) {
int soma = 0;
for (Paciente paciente : pacientes) {
if (condicao.test(paciente)) {
soma += paciente.idade;
}
}
return soma / pacientes.size();
}
private Paciente menor(List<Paciente> pacientes, Function<Paciente, Double> funcao, Predicate<Paciente> condicao) {
Paciente menor = null;
for (Paciente paciente : pacientes) {
if (condicao.test(paciente)) {
if (menor == null) {
menor = paciente;
}
if (funcao.apply(paciente) < funcao.apply(menor)) {
menor = paciente;
}
}
}
return menor;
}
private int quantidade(List<Paciente> pacientes) {
return pacientes.size();
}
private int quantidade(List<Paciente> pacientes, Predicate<Paciente> condicao) {
int quantidade = 0;
for (Paciente paciente : pacientes) {
if (condicao.test(paciente)) {
quantidade++;
}
}
return quantidade;
}
}