❗️ Задача:
Напишите код метода generatePatientsTemperatures(), который должен сгенерировать массив float, содержащий значения температур пациентов от 32 до 40 градусов.
В методе getReport()вам требуется составить строку с отчётом по значениям температур в массиве с пациентами:
- Соберите в строку список температур пациентов.
- Рассчитайте среднее арифметическое значение температуры.
- Посчитайте количество здоровых пациентов с температурой от 36,2 до 36,9 градусов.
Округлите среднюю температуру до 2 знаков после запятой,
а температуры каждого пациента до 1 знака после запятой.
✒️ Приступим!
Класс Hospital
📌 Создадим класс Hospital, в котором реализуем необходимые из условия задачи методы:
- generatePatientsTemperatures()
- getReport()
📌 Метод generatePatientsTemperatures(), который будет генерировать и возвращать массив. На вход метода будем передавать количество пациентов в больнице:
public static float[] generatePatientsTemperatures(int patientsCount) {
}
✎ Инициализируем переменную массива, размером patientsCount, куда будем "класть" наши результаты
float[] patientsTemperature = new float[patientsCount]
✎ Для генерации случайных значений температур пациентов от 32 до 40 градусов, воспользуемся статическим методом random() класса Math.
Math.random() * ((40 - 32)) + 32;
✂️ Для генерации случайных чисел в определенном диапазоне рекомендую сохранить шпаргалку:
[a, b]
a + (int)(( Math.random() * (b-a+1)) ✂️
✎ Для заполнения нашего массива случайными значениями температур, нам потребуется перебрать все его значения, для этого воспользуемся циклом со следующим определением:
for (int i = 0; i < patientsTemperature.length; i++)
✎ Заполнять значения массива будем по уже сформированной формуле, однако надо помнить, что статический метод random() класса Math возвращает значение double, а нам, в соответствии с условием задачи требуется тип float, поэтому воспользуемся явным преобразованием и объявим в теле цикла значение температуры:
float temperature = (float) Math.random() * ((40 - 32)) + 32;
и на каждой итерации цикла будем присваивать это значение i-му элементу массива
patientsTemperature[i] = temperature;
↘️ Итого для получения результата работы нашего метода необходимо добавить ключевое слово return; и готово!:
public static float[] generatePatientsTemperatures(int patientsCount) {
ㅤfloat[] patientsTemperature = new float[patientsCount];
ㅤfor (int i = 0; i < patientsTemperature.length; i++) {
ㅤㅤfloat temperature = (float) Math.random() * ((40 - 32)) + 32;
ㅤㅤpatientsTemperature[i] = temperature;
ㅤ}
ㅤreturn patientsTemperature;
}
📌 Метод getReport(), который составит и вернет строку со следующими данным:
- Список температур пациентов.
- Среднее арифметическое значение температуры.
- Количество здоровых пациентов (с температурой от 36,2 до 36,9 градусов).
На вход метода будем передавать наш массив со значениями температур пациентов:
public static String getReport(float[] temperatureData) {
}
✎ Инициализируем в теле метода переменные, которые будут хранить указанные значения:
- String patientsTemperature = ""; - строка со списком температур
- float averageTemperature = 0; - среднее арифметическое значение температуры типа float
- int healthyCount = 0; - счетчик здоровых пациентов
✎ Для вычисления этих значений потребуется перебрать все элементы нашего массива и произвести над ними не сложные действия, но перед этим вернемся к условию задачи и вспомним, что:
- средняя температура должна быть округлена до 2 знаков после запятой;
- температура каждого пациента до 1 знака после запятой.
Для этого в классе укажем поля, в виде констант с требуемыми форматами:
private final static DecimalFormat FORMAT_1 = new DecimalFormat("#0.0");
private final static DecimalFormat FORMAT_2 = new DecimalFormat("#0.00");
✎ Переберем элементы массива и заполним инициализированные переменные:
for (int i = 0; i < temperatureData.length; i++) {
ㅤpatientsTemperature += " " + FORMAT_1.format(temperatureData[i]);
ㅤaverageTemperature += temperatureData[i] / temperatureData.length;
ㅤif (temperatureData[i] >= 36.2f && temperatureData[i] <= 36.9f) {
ㅤㅤhealthyCount++;
ㅤ}
}
✎ Теперь объявим и заполним строку получившимися результатами:
String report =
ㅤㅤ"Температуры пациентов: " + patientsTemperature.trim() +
ㅤㅤ"\nСредняя температура: " + FORMAT_2.format(averageTemperature) ㅤㅤ+ "\nКоличество здоровых: " + healthyCount;
↘️ Итого для получения результата работы нашего метода необходимо добавить ключевое слово return; и готово!:
public static String getReport(float[] temperatureData) {
ㅤString patientsTemperature = "";
ㅤfloat averageTemperature = 0;
ㅤint healthyCount = 0;
ㅤfor (int i = 0; i < temperatureData.length; i++) {
ㅤpatientsTemperature += " " + FORMAT_1.format(temperatureData[i]);
ㅤaverageTemperature += temperatureData[i] / temperatureData.length;
ㅤㅤif (temperatureData[i] >= 36.2f && temperatureData[i] <= 36.9f) {
ㅤㅤㅤhealthyCount++;
ㅤㅤ}
ㅤ}
ㅤString report =
ㅤㅤ"Температуры пациентов: " + patientsTemperature.trim() +
ㅤㅤ"\nСредняя температура: " + FORMAT_2.format(averageTemperature) ㅤㅤ+ "\nКоличество здоровых: " + healthyCount;
ㅤreturn report;
}
✅ Можно считать задачу выполненной, проверим вывод в консоль в классе Main.
Класс Main
📌 Объявим массив и сгенерируем для него значения, посредством созданного нами статического метода generatePatientsTemperatures() (на вход подаем желаемое количество пациентов, чьи температуры необходимо сгенерировать)
📌 И выведем в консоль результат работы статического метода getReport() (на вход подаем наш сгенерированный массив)
public class Main {
ㅤpublic static void main(String[] args) {
ㅤㅤfloat[] temperatureData = Hospital.generatePatientsTemperatures(10);
ㅤㅤSystem.out.println(Hospital.getReport(temperatureData));
ㅤ}
}
▶️ Run 'Main.main()'