Если вам нужен равномерно распределенный псевдослучайный тип long в диапазоне [0, m
), попробуйте использовать оператор по модулю и метод абсолютного значения в сочетании с методом nextLong()
, как показано ниже:
Math.abs(rand.nextLong()) % m;
Где rand
- ваш Случайный объект.
Оператор по модулю делит два числа и выводит остаток от этих чисел. Например, 3 % 2
равно 1
, потому что остаток от 3 и 2 равен 1.
Поскольку nextLong()
генерирует равномерно распределенное псевдослучайное длинное в диапазоне [- (2 ^ 48), 2 ^ 48) (или где-то в этом диапазоне), вам необходимо принять его абсолютное значение. Если вы этого не сделаете, по модулю метода nextLong()
с вероятностью 50% можно вернуть отрицательное значение, выходящее за пределы диапазона [0, m
).
То, что вы первоначально запрашивали, было равномерно распределенным псевдослучайным длинным в диапазоне [0,100). Следующий код делает это:
Math.abs(rand.nextLong()) % 100;