Как создать метод, который заполняет массив float[] случайными числами в заданом диапазоне?

Рейтинг: 0Ответов: 2Опубликовано: 05.02.2023

Вопрос:

Как создать метод, который заполняет массив float[] случайными числами в заданом диапазоне от 32.0 до 40.0?

Проблема:

Не понимаю как взаимодействуют класс Main и метод main(), в котором создают массив float[] temperatureData с классом Hospital метод generatePatientsTemperatures(). Как заполнить массив float[] temperatureData, что лежит в class Main методом generatePatientsTemperatures() из класса Hospital?

Важно:

Класс Main, и все, что в нем задано, не может быть изменено.

Можно лишь менять код внутри фигурных скобок метода generatePatientsTemperatures(). Моя попытка не работает.

Код:

public class Main {
public static void main(String[] args) {
    float[] temperatureData = Hospital.generatePatientsTemperatures(30);
    System.out.println(temperatureData);
}

public class Hospital {
    public static float[] generatePatientsTemperatures(int patientsCount) {
        
        // моя попытка 
        float minTemp = 32f
        float maxTemp = 40f;
        float[] array = new float[patientsCount];
        for (int i = 0; i < array.length; i++) {
            array[i] = (float) (Math.random() * maxTemp - minTemp) + minTemp;
        }
        // моя попытка
        return array;
    }
}

}

Ответы

▲ 0Принят
array[i] = minTemp + (float) (Math.random() * (maxTemp - minTemp));

ты не учитываешь правильный диапазон для случайных чисел, когда вычитаешь minTemp из maxTemp в выражении Math.random() * (maxTemp - minTemp). Это должно быть просто (maxTemp - minTemp) * Math.random() + minTemp.

▲ 1

Первая ошибка в том, что числа заполняются в массив неправильно. Это вызвано тем что неверные значения присваиваются элементам массива, поскольку неправильно вычисляется значение случайного вещественного числа из заданного диапазона. Для того, чтобы решить задачу надо прочитать следующее:

Генерация случайных чисел в Java.

  1. А что если нам необходимо сгенерировать числа из другого диапазона, отличного от [0;1)? Легко! Давайте формально запишем наш диапазон: [a;b). То есть нижняя граница а, верхняя b. Тогда для генерации вещественных чисел в заданном диапазоне нужно записать следующее:

( Math.random() * (b-a) ) + a

То есть, код надо переписать так, что

float minTemp = 32f
float maxTemp = 40f;
float[] array = new float[patientsCount];
for (int i = 0; i < array.length; i++) 
   array[i] = (float) (Math.random() * (maxTemp - minTemp) + minTemp);       
        

Вторая ошибка в методе main(), который не выводит елементы массива в консоль. Для того, чтобы это сделать, нужно использовать цикл for или использовать доступные средства для вывода содержимого массива в консоль.

System.out.println(Arrays.toString(temperatureData));

Вообще говоря, количество способов распечатки массива достаточно большое. Об этом можно прочитать в Как распечатать массив на Java.