Вывести среднюю температуру массива пациентов, температуру пациентов и количество выздоровевших

public class Hospital {

    public static float[] generatePatientsTemperatures(int patientsCount) {

        //TODO: напишите метод генерации массива температур пациентов
        int[] patients = new int[10];
        float[] patientsTemp = new float;

        for (int i = 0; i < patients.length; i++) {
            double patientsTemp = ((Math.random() * Math.round((40 - 32) + 1)) + 32);
            patients[i] = patientsTemp;
            return new float[0];
        }

        public static String getReport ( float[] temperatureData){
        /*
        TODO: Напишите код, который выводит среднюю температуру по больнице,количество здоровых пациентов,
            а также температуры всех пациентов.
        */

            double average = 0;
            if (patientsTemp.length>0) {
                double sum = 0;

            for (int i = 0; i < patientsTemp.length; i++) {
                sum += patientsTemp[i];
            }
            average = sum/ patientsTemp.length;
            }
            int patientsHealth = 0;
            double temp =0;
            if (36.2 < temp < 36.9) {
                patientsHealth++;
            }

            String report =
                    "Температуры пациентов: " +
                            patientsTemp +
                            "\nСредняя температура: " +
                            average +
                            "\nКоличество здоровых: " +
                            patientsHealth;

            return report;
        }
    }
}



public class Main {
    public static void main(String[] args) {

        float[] temperatureData = Hospital.generatePatientsTemperatures(0);
        System.out.println(Hospital.getReport(temperatureData));

        //Пример вывода в консоль:
        //Температуры пациентов: 36.7 38.9 34.7
        //Средняя температура: 36.76
        //Количество здоровых: 1

        //Округлите среднюю температуру с помощью Math.round до 2 знаков после запятой,
        //а температуры каждого пациента до 1 знака после запятой
    }
}

Ответы (1 шт):

Автор решения: Дмитрий

Вы все делаете настолько сложно и допускаете настолько много ошибок, что ваш код даже от компиляции очень далек, а не то что от корректного выполнения. Принцип kiss никто не отменял, все должно быть как можно проще:

import java.text.DecimalFormat;
import java.util.Arrays;
import java.util.Random;
import java.util.stream.Collectors;

public class Hospital {

    private final static Random RND = new Random();
    private final static DecimalFormat FORMATTER_1 = new DecimalFormat("#0.0");
    private final static DecimalFormat FORMATTER_2 = new DecimalFormat("#0.00");

    private final static double MIN_TEMP = 32;
    private final static double MAX_TEMP = 40;
    private final static double MIN_HEALTH_TEMP = 36.2;
    private final static double MAX_HEALTH_TEMP = 36.9;

    public static double[] generatePatientsTemperatures(int patientsCount) {
        return RND.doubles(patientsCount, MIN_TEMP, MAX_TEMP).toArray();
    }

    public static String getReport(double[] temperatureData) {

        double avg = Arrays.stream(temperatureData).average().getAsDouble();

        long patientsHealth = Arrays.stream(temperatureData)
                .filter(temp -> MIN_HEALTH_TEMP < temp && temp < MAX_HEALTH_TEMP).count();

        return String.join(" ",
                "Температуры пациентов:", printDouble(FORMATTER_1, temperatureData),
                "\nСредняя температура:", FORMATTER_2.format(avg),
                "\nКоличество здоровых:", String.valueOf(patientsHealth)
        );
    }

    private static String printDouble(DecimalFormat formatter, double ... args) {
        return Arrays.stream(args).mapToObj(formatter::format).collect(Collectors.joining("; "));
    }

    public static void main(String[] args) {
        System.out.println(getReport(generatePatientsTemperatures(10)));
    }

}
→ Ссылка