Как генерировать случайные целые числа в определенном диапазоне в Java? - PullRequest
3225 голосов
/ 12 декабря 2008

Как создать случайное значение int в определенном диапазоне?

Я пробовал следующее, но они не работают:

Попытка 1:

randomNum = minimum + (int)(Math.random() * maximum);
// Bug: `randomNum` can be bigger than `maximum`.

Попытка 2:

Random rn = new Random();
int n = maximum - minimum + 1;
int i = rn.nextInt() % n;
randomNum =  minimum + i;
// Bug: `randomNum` can be smaller than `minimum`.

Ответы [ 64 ]

1 голос
/ 12 февраля 2019

Используйте math.random() и задайте требования в операторе if. Самый простой, простой и быстрый подход

1 голос
/ 01 января 2019

Ниже приведен пример класса, который показывает, как генерировать случайные целые числа в определенном диапазоне. Присвойте любое значение, которое вы хотите, в качестве максимального значения переменной 'max', и присвойте любое значение, которое вы хотите, в качестве минимального значения переменной 'min'.

public class RandomTestClass {

    public static void main(String[] args) {
        Random r = new Random();
        int max = 10;
        int min = 5;
        int x;
        x = r.nextInt(max) + min;
        System.out.println(x);
    }

}
1 голос
/ 26 апреля 2017

Использование потоков Java 8,

  • Передать начальную емкость - Сколько чисел
  • Передать randomBound - от x до randomBound
  • Передайте true / false для отсортированных или нет
  • Передача нового объекта Random ()

public static List<Integer> generateNumbers(int initialCapacity, int randomBound, Boolean sorted, Random random) {

    List<Integer> numbers = random.ints(initialCapacity, 1, randomBound).boxed().collect(Collectors.toList());

    if (sorted)
        numbers.sort(null);

    return numbers;
}

В этом примере он генерирует числа из 1-Randombound.

0 голосов
/ 13 мая 2019

Можно использовать следующий код:

ThreadLocalRandom.current().nextInt(rangeStart, rangeEndExclusive)
...