Случайное число JavaScript от 15 до 225 с шагом 30? - PullRequest
5 голосов
/ 18 января 2012

Привет! Мне нужно сгенерировать случайное число в JavaScript от 15 до 225, которое может быть только с шагом 30. Например: 45, 75, 105 и т. Д.

Есть идеи, как это можно сделать? Я знаю Math.floor(Math.random()*11), например, для случайного числа 1-10, но как это можно изменить, чтобы соответствовать тому, что я пытаюсь сделать?

Ответы [ 5 ]

6 голосов
/ 18 января 2012

Вроде так

Math.floor(Math.random()*8)*30 + 15
5 голосов
/ 18 января 2012

Начнем с таблицы значений

x |   y
=======
0 |  15
1 |  45
2 |  75
3 | 105
4 | 135
5 | 165
6 | 195
7 | 225

Настройка уравнения

y = ax + b

Подключите некоторые начальные значения

15 = a(0) + b

Решите для любых переменных вы можете

15 = b

Подключить разные начальные значения

225 = a(7) + 15

Решите для любых оставшихся переменных

210 = a(7)
30 = a

Переформулируйте уравнение

y = 30x + 15

Рандомизировать x между пределами

x = Math.floor(Math.random() * 8) //0-7

Использование в функции

function customRandomNumber() {
    var x;
    x = Math.floor(Math.random() * 8);
    return 30 * x + 15;
}

Получение случайного числа в интервале с шагом может быть обобщено с помощью следующей функции:

function rand(min, max, step) {
    var delta,
        range,
        rand;
    if (arguments.length < 2) {
        max = min;
        min = 0;
    }
    if (!step) {
        step = 1;
    }
    delta = max - min;
    range = delta / step;
    rand = Math.random();
    rand *= range;
    rand = Math.floor(rand);
    rand *= step;
    rand += min;
    return rand;
}

Что бы поставить вашу функцию как

rand(15, 225, 30);

Следует также отметить, что, поскольку я забыл о возможных проблемах с границами, обобщенная форма будет , а не включать верхнюю границу 225. Это потому, что Math.random() возвращает число, большее или равно нулю и меньше один (0 <= Math.random < 1). Если вы хотите, чтобы включили верхнюю границу, вам просто нужно включить еще один шаг в интервал:

rand(15, 255, 30) //will return 15...225
5 голосов
/ 18 января 2012

как насчет использования:

[15, 45, 75, 105, 135, 165, 195, 225][Math.floor(Math.random()*8)]
3 голосов
/ 18 января 2012

Вам нужно подумать о конечном результате, который вы хотите.От 15 до 225 - это то, к чему вы хотите стремиться, но не то, с чем вам нужно работать, чтобы получить результат.

225/30 = 7,5.15 - половина от 30. Следовательно, (225-15) / 30 = 7. Вам нужно случайное число от 1 до 7, которое вы затем умножите на 30 и добавите 15 к окончательному результату.

var myNumber = Math.floor(Math.random()*7);
myNumber = myNumber *30 + 15;

console.log(myNumber);
0 голосов
/ 18 января 2012

Вот функция, которая предварительно вычисляет все возможные числа и случайным образом возвращает единицу.

function getRandomNumber(start, end, increments) {
    var numbers = [];
    for(var n = start; n <= end; n += increments) {
        numbers.push(n);
    }

    var randomIndex = Math.floor(Math.random() * numbers.length);
    return numbers[randomIndex];
}

Использовать как,

getRandomNumber(15, 225, 30)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...