Генерация случайных целых чисел в JavaScript в заданном диапазоне
Как я могу сгенерировать случайные целые числа между двумя заданными переменными в JavaScript? Например, если я задам x = 4
и y = 8
, то мне нужно, чтобы выводилось любое из значений 4, 5, 6, 7, 8
.
4 ответ(ов)
Этот код генерирует случайное целое число в диапазоне от minimum
до maximum
, включая оба краевых значения. Вот объяснение того, как он работает:
Math.random()
генерирует случайное число с плавающей запятой от 0 (включительно) до 1 (исключительно).- Умножая это число на
(maximum - minimum + 1)
, мы расширяем диапазон до(maximum - minimum + 1)
, чтобы получилось нужное количество возможных целых чисел. - После этого мы применяем
Math.floor()
, чтобы округлить результат до ближайшего меньшего целого числа. - Наконец, добавляем
minimum
, чтобы сдвинуть диапазон от 0 доmaximum - minimum
в нужный диапазон отminimum
доmaximum
.
Таким образом, итоговая строка кода создает случайное целое число в заданном диапазоне.
Если у вас есть дополнительные вопросы или нужна помощь, не стесняйтесь спрашивать!
Если вам нужна переменная в диапазоне от 0 до max, вы можете использовать следующий код:
Math.floor(Math.random() * max);
Данный код генерирует случайное целое число, которое будет находиться в пределах от 0 (включительно) до max (не включая). Использование Math.random()
возвращает дробное число от 0 до, но не включая, 1, а затем мы умножаем это значение на max и применяем Math.floor()
, чтобы округлить его до ближайшего меньшего целого числа.
Предыдущие ответы не учитывают вполне разумные параметры 0
и 1
. Вместо использования ceil
или floor
вам следует использовать round
:
function randomNumber(minimum, maximum){
return Math.round( Math.random() * (maximum - minimum) + minimum);
}
console.log(randomNumber(0,1)); // 0 1 1 0 1 0
console.log(randomNumber(5,6)); // 5 6 6 5 5 6
console.log(randomNumber(3,-1)); // 1 3 1 -1 -1 -1
Таким образом, функция генерирует случайные числа в указанном диапазоне, и round
позволяет корректно возвращать целые числа даже при параметрах, равных 0
и 1
.
Вопрос: Как работает функция getRandomizer
для генерации случайных чисел в заданном диапазоне?
Ответ:
Функция getRandomizer
выглядит следующим образом:
function getRandomizer(bottom, top) {
return function() {
return Math.floor(Math.random() * (1 + top - bottom)) + bottom;
}
}
Применение:
var rollDie = getRandomizer(1, 6);
var results = "";
for (var i = 0; i < 1000; i++) {
results += rollDie() + " "; // Создаем строку, заполненную 1000 случайными числами в диапазоне от 1 до 6.
}
Разбор:
В этом коде мы возвращаем функцию (заимствование из функционального программирования), которая при вызове будет возвращать случайное целое число между значениями bottom
и top
, включая их. Мы говорим "включая", потому что хотим учитывать как bottom
, так и top
в диапазоне возможных чисел. Таким образом, вызов getRandomizer(1, 6)
может вернуть одно из чисел: 1, 2, 3, 4, 5 или 6.
(bottom
— это нижнее значение, а top
— верхнее значение)
Math.random() * (1 + top - bottom)
Math.random()
возвращает случайное значение с плавающей запятой в диапазоне от 0 до 1. Если мы умножим его на разницу между top
и bottom
, увеличенную на 1, то получим число в диапазоне от 0
до 1 + top - bottom
.
Math.floor(Math.random() * (1 + top - bottom))
Math.floor
округляет число вниз до ближайшего целого. Таким образом, мы получаем все целые числа в диапазоне от 0
до top - bottom
. Число 1 может показаться лишним, но оно необходимо, потому что при округлении вниз верхнее значение никогда не будет достигнуто. Случайное десятичное число должно находиться в диапазоне 0
до (1 + top - bottom)
, чтобы после округления мы получили целое число в диапазоне от 0
до top - bottom
:
Math.floor(Math.random() * (1 + top - bottom)) + bottom
Код в предыдущем примере дает нам целое число в диапазоне от 0
до top - bottom
, так что теперь нам нужно просто добавить bottom
к этому результату, чтобы получить целое число в диапазоне от bottom
до top
, включая оба значения. 😄
Примечание: Если вы передадите нецелочисленное значение или укажете большее число первым, вы получите нежелательное поведение. Но, если никто не попросит, я не собираюсь углубляться в проверку аргументов, так как это далеко от первоначального вопроса.
Генерация случайного числа в диапазоне между двумя числами в JavaScript
Генерация случайной строки/символов в JavaScript
Как сгенерировать случайные целые числа в определенном диапазоне на Java?
Как перемешать (сделать случайным) массив в JavaScript?
Получение случайного значения из массива в JavaScript