Генерация случайных целых чисел в 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?
Генератор случайных цветов