Генерация случайных целых чисел в JavaScript в определенном диапазоне?

Привет, я размещаю здесь резюме из многих источников в Интернете для различных решений «доступ запрещен»: большинство информации можно найти здесь (включая необходимые требования) - sysinternal help

  1. , как кто-то сказал, добавьте этот ключ реестра, а затем перезагрузите компьютер: reg add HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Policies \ system / v LocalAccountTokenFilterPolicy / t REG_DWORD / d 1 / f Прочитайте this статью базы знаний , чтобы узнать, что это делает и почему это необходимо
  2. Отключить брандмауэр (обратите внимание - это оставит вас без какой-либо защиты брандмауэра) netsh advfirewall set allprofiles state off
  3. , если целевой пользователь имеет пустой PW, и вы не хотите его добавлять, запускайте его в цель: [HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa] "LimitBlankPasswordUse" = dword: 00000000
  4. Это не помогло я, но я прочитал его для других в нескольких местах, в целевом исполнении: Пуск -> Выполнить -> secpol.msc -> Локальные политики -> Параметры безопасности -> Доступ к сети: Совместное использование> и модель безопасности для локальных учетных записей> Классический - локальные пользователи аутентифицируются как сами, если уже находятся в «Классическом»: перейдите в «Гость только ...», запустите из расширенной командной строки gpupdate \ force, снова вернитесь в «Классический - ..» запускать из командной строки с повышенными значениями gpupdate \ force
  5. Это решило мою проблему: запустить на целевом компьютере из командной строки с повышенными привилегиями «net use», посмотреть на график вывода и для акций, перечисленных в удаленном столбце (я удалил только отключенный один из них - вы можете попробовать их все) запустить «net use [удаленный путь из списка] / удалить» затем запустить «net use \ target \ Admin $ / user: [имя пользователя]» ввести запрос запроса пароля (если пустой PW просто нажмите введите), альт должен работать.

удачи, надеюсь, это сэкономит время.

1751
задан thadeuszlay 11 March 2019 в 13:34
поделиться

8 ответов

На странице Mozilla Developer Network есть несколько примеров:

/**
 * Returns a random number between min (inclusive) and max (exclusive)
 */
function getRandomArbitrary(min, max) {
    return Math.random() * (max - min) + min;
}

/**
 * Returns a random integer between min (inclusive) and max (inclusive).
 * The value is no lower than min (or the next integer greater than min
 * if min isn't an integer) and no greater than max (or the next integer
 * lower than max if max isn't an integer).
 * Using Math.round() will give you a non-uniform distribution!
 */
function getRandomInt(min, max) {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

Вот логика за этим. Это простое правило из трех:

Math.random () возвращает Число от 0 (включительно) до 1 (исключая). Итак, у нас есть такой интервал:

[0 .................................... 1)

Теперь нам нужно число от min (включительно) до max (исключая):

[0 .................................... 1)
[min .................................. max)

Мы можем использовать Math.random для получения корреспондента в интервале [min, max). Но, сначала мы должны немного разложить проблему на множители, вычтя мин из второго интервала:

[0 .................................... 1)
[min - min ............................ max - min)

Это дает:

[0 .................................... 1)
[0 .................................... max - min)

Теперь мы можем применить Math.random , а затем вычислить соответствующее . Давайте выберем случайное число:

                Math.random()
                    |
[0 .................................... 1)
[0 .................................... max - min)
                    |
                    x (what we need)

Итак, чтобы найти x , мы должны сделать:

x = Math.random() * (max - min);

Не забудьте добавить обратно min , чтобы мы получили число в интервале [min, max):

x = Math.random() * (max - min) + min;

Это была первая функция из MDN. Второй возвращает целое число от min до max включительно.

Теперь для получения целых чисел вы можете использовать round , ceil или этаж .

Вы можете использовать Math.round (Math.random () * (max - min)) + min , однако это дает нечетное распространение. Обе,

3637
ответ дан 22 November 2019 в 20:06
поделиться
  • случайный (минута, макс.) генерирует случайное число между минутой (содержащей) и макс. (эксклюзивный)
  • , Math.floor округляет число в меньшую сторону до ближайшего целого числа

    function generateRandomInteger (min, max) { 
        return Math.floor(random(min,max)) 
    }`
    

Так для генерации случайного целого числа между 4 и 8 содержащих, вызовите вышеупомянутую функцию со следующими аргументами:

generateRandomInteger (4,9)
0
ответ дан 22 November 2019 в 20:06
поделиться

Стать crypto-сильным случайное целое число в диапазоне [x, y] попытка

let rand= (x,y)=> x+(y-x+1)*crypto.getRandomValues(new Uint32Array(1))[0]/2**32|0

console.log(rand(4,8))
2
ответ дан 22 November 2019 в 20:06
поделиться

Мой метод генерации случайного числа между 0 и n (n исключенный):

Math.floor((Math.random() * 10) % n)
0
ответ дан 22 November 2019 в 20:06
поделиться

IonuИ› G. Stan записал большой ответ, но это было немного слишком сложно для меня для схватывания. Так, я нашел еще более простое объяснение тех же понятий в https://teamtreehouse.com/community/mathfloor-mathrandom-max-min-1-min-explanation Jason Anello.

ПРИМЕЧАНИЕ: единственная важная вещь необходимо знать прежде, чем читать, объяснение Jason является определением "усеченных". Он использует тот термин при описании Math.floor(). Оксфордский словарь определяет "усеченный" как:

Сокращаются (что-то) путем отключения вершины или конца.

0
ответ дан 22 November 2019 в 20:06
поделиться
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() + " ";    //make a string filled with 1000 random numbers in the range 1-6.
}

разбивка:

Мы возвращаем функцию (заимствованную из функционального программирования), которая при вызове вернет случайное целое число между значениями bottom ] и верх включительно. Мы говорим «инклюзивный», потому что хотим включить в диапазон чисел, которые могут быть возвращены, как нижнюю, так и верхнюю часть. Таким образом, getRandomizer (1, 6) вернет 1, 2, 3, 4, 5 или 6.

(внизу - меньшее число, вверху - большее число)

Math.random() * ( 1 + top - bottom )

Math. random () возвращает случайное удвоение между 0 и 1, и если мы умножим его на единицу плюс разницу между top и bottom , мы получим удвоение где-то между 0 и 1 + ba .

Math.floor( Math.random() * ( 1 + top - bottom ) )

Math.floor округляет число до ближайшего целого. Итак, теперь у нас есть все целые числа от 0 до сверху-снизу . 1 выглядит сбивающим с толку, но он должен быть там, потому что мы всегда округляем в меньшую сторону, поэтому без него невозможно достичь верхнего числа. Случайное десятичное число, которое мы генерируем, должно быть в диапазоне от 0 до (1 + верх-низ) , чтобы мы могли округлить в меньшую сторону и получить int в диапазоне 0 to top-bottom

Math.floor( Math.random() * ( 1 + top - bottom ) ) + bottom

Код в предыдущем примере дал нам целое число в диапазоне 0 и top-bottom , поэтому все, что нам нужно сделать сейчас, это добавьте bottom к этому результату, чтобы получить целое число в диапазоне bottom и top включительно. : D


ПРИМЕЧАНИЕ: Если вы сначала передадите нецелое значение или большее число, вы получите нежелательное поведение, но если кто-то этого не попросит, я не буду углубляться в код проверки аргументов, так как он довольно далек от цели исходного вопроса.

55
ответ дан 22 November 2019 в 20:06
поделиться
var randomnumber = Math.floor(Math.random() * (maximum - minimum + 1)) + minimum;
512
ответ дан 22 November 2019 в 20:06
поделиться
function getRandomInt(lower, upper)
{
    //to create an even sample distribution
    return Math.floor(lower + (Math.random() * (upper - lower + 1)));

    //to produce an uneven sample distribution
    //return Math.round(lower + (Math.random() * (upper - lower)));

    //to exclude the max value from the possible values
    //return Math.floor(lower + (Math.random() * (upper - lower)));
}

Чтобы протестировать эту функцию и ее варианты, сохраните приведенный ниже HTML / JavaScript в файл и откройте его в браузере. Код создаст график , показывающий распределение одного миллиона вызовов функций. Код также будет записывать крайние случаи, поэтому, если функция выдает значение больше максимального или меньше минимального, you.will.know.about.it.

<html>
    <head>
        <script type="text/javascript">
        function getRandomInt(lower, upper)
        {
            //to create an even sample distribution
            return Math.floor(lower + (Math.random() * (upper - lower + 1)));

            //to produce an uneven sample distribution
            //return Math.round(lower + (Math.random() * (upper - lower)));

            //to exclude the max value from the possible values
            //return Math.floor(lower + (Math.random() * (upper - lower)));
        }

        var min = -5;
        var max = 5;

        var array = new Array();

        for(var i = 0; i <= (max - min) + 2; i++) {
          array.push(0);
        }

        for(var i = 0; i < 1000000; i++) {
            var random = getRandomInt(min, max);
            array[random - min + 1]++;
        }

        var maxSample = 0;
        for(var i = 0; i < max - min; i++) {
            maxSample = Math.max(maxSample, array[i]);
        }

        //create a bar graph to show the sample distribution
        var maxHeight = 500;
        for(var i = 0; i <= (max - min) + 2; i++) {
            var sampleHeight = (array[i]/maxSample) * maxHeight;

            document.write('<span style="display:inline-block;color:'+(sampleHeight == 0 ? 'black' : 'white')+';background-color:black;height:'+sampleHeight+'px">&nbsp;[' + (i + min - 1) + ']:&nbsp;'+array[i]+'</span>&nbsp;&nbsp;');
        }
        document.write('<hr/>');
        </script>
    </head>
    <body>

    </body>
</html>
6
ответ дан 22 November 2019 в 20:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: