Как создать метод, который заполняет массив float[] рандомными числами в заданом диапазоне?
Вопрос: как решить задачу?
Задача: нужно создать метод который заполняет массив 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;
}
}
}
Ответы (2 шт):
Первая ошибка в том, что числа заполняются в массив неправильно. Это вызвано тем что неверные значения присваиваются элементам массива, поскольку неправильно вычисляется значение случайного вещественного числа из заданного диапазона. Для того, чтобы решить задачу надо прочитать следующее:
Генерация случайных чисел в Java.
- А что если нам необходимо сгенерировать числа из другого диапазона, отличного от [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.
array[i] = minTemp + (float) (Math.random() * (maxTemp - minTemp));
ты не учитываешь правильный диапазон для случайных чисел, когда вычитаешь minTemp из maxTemp в выражении Math.random() * (maxTemp - minTemp). Это должно быть просто (maxTemp - minTemp) * Math.random() + minTemp.