Это довольно простой вопрос Java (хотя, вероятно, применим ко всему программированию):
Math.random()
возвращает число от нуля до единицы.
Если я хочу вернуть целое число от нуля до ста, я бы сделал:
(int) Math.floor(Math.random() * 101)
От одного до ста я бы сделал:
(int) Math.ceil(Math.random() * 100)
Но что, если я хочу получить число от трех до пяти? Будет ли это похоже на следующее утверждение:
(int) Math.random() * 5 + 3
Я знаю про nextInt()
ин java.lang.util.Random
. Но я хочу узнать, как это сделать с помощью Math.random()
.
(int)Math.floor(Math.random()*3) + 3
Math.ceil
неправильно, это дает неправильный результат, когдаMath.random()
возвращается0
.Ответы:
Выход
randomWithRange(2, 5)
10 раз:Границы являются инклюзивными, т.е. [2,5], и
min
должны быть меньше, чемmax
в приведенном выше примере.EDIT: Если кто - то будет пытаться быть глупым и реверса
min
иmax
, вы можете изменить код на:EDIT2: на ваш вопрос о
double
s, это просто:И снова, если вы хотите защитить это от идиотов, это просто:
источник
(int)
и хотите вернутьdouble
?int
s наdouble
s (и приведение типов не нужно). Я предполагал, что вы хотитеint
s, но я добавлю в свой пост.double
s удалить+ 1
также, такMath.random()
как не обрезается. Однако диапазон будет [min, max), посколькуMath.random
«Возвращает двойное значение с положительным знаком, большим или равным 0,0 и меньше 1,0». Вероятность того, что числоmax
все равно будет точным, будет минимальной, даже если бы это было возможно.Если вы хотите сгенерировать число от 0 до 100, ваш код будет выглядеть так:
Чтобы сгенерировать число от 10 до 20:
В общем случае:
(где
lowerbound
все включено иupperbound
эксклюзивно).Включение или исключение
upperbound
зависит от вашего выбора. Скажем,range = (upperbound - lowerbound) + 1
тогдаupperbound
включительно, но еслиrange = (upperbound - lowerbound)
тогдаupperbound
является исключительным.Пример: если мне нужно целое число от 3-5, то если диапазон равен (5-3) +1, то 5 является включительно, но если диапазон равен (5-3), то 5 является исключающим.
источник
upperbound
эксклюзив? Я думаю, что это будет включено.Random
Класс Java находится вjava.util
пакете будет служить вашей цели лучше. У него есть несколькоnextInt()
методов, возвращающих целое число. Тот, который принимает аргумент int, сгенерирует число от 0 до этого int, последнее не включает.источник
Math.random()
. Спасибо.Чтобы сгенерировать число от 10 до 20 включительно, вы можете использовать
java.util.Random
источник
Вот метод, который получает границы и возвращает случайное целое число. Он немного более продвинутый (полностью универсальный): границы могут быть как положительными, так и отрицательными , а границы минимума / максимума могут быть в любом порядке.
Как правило, он находит абсолютное расстояние между границами, получает соответствующее случайное значение и затем сдвигает ответ на основе нижней границы.
источник