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