hospital ajuda

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.
:slight_smile:

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;
    }
}