Найти тему
NM.getJavaPractice();

Hospital Collections Array

Оглавление
Цель: получить опыт работы с массивами
Цель: получить опыт работы с массивами

❗️ Задача:

Напишите код метода generatePatientsTemperatures(), который должен сгенерировать массив float, содержащий значения температур пациентов от 32 до 40 градусов.

В методе getReport()вам требуется составить строку с отчётом по значениям температур в массиве с пациентами:

- Соберите в строку список температур пациентов.

- Рассчитайте среднее арифметическое значение температуры.

- Посчитайте количество здоровых пациентов с температурой от 36,2 до 36,9 градусов.

Округлите среднюю температуру до 2 знаков после запятой,

а температуры каждого пациента до 1 знака после запятой.

✒️ Приступим!

-2

Класс 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()'

-3
-4