Как генерируются рандомные числа в массиве?

Не понимаю как задать нижнюю границу 18 а верхнюю 40, помогите разобраться пожалуйста

    int min = 18;
    int range = 40;
    int[] array = new int[25];
    for (int i = 0; i < array.length; i++) {
        array[i] =  min + (int)(Math.random() * range);
        System.out.println(array[i]);

Ответы (3 шт):

Автор решения: HaZcker

Наверное как-то так:

array[i] = min + (int)(Math.random() * ((range - min) + 1))

Ответ взят отсюда, и переделан под ваши нужды:
https://stackoverflow.com/questions/363681/how-do-i-generate-random-integers-within-a-specific-range-in-java

→ Ссылка
Автор решения: Сочиняй-Хан

Так еще можно. random.nextInt(22) накрафтит число от нуля до 22, и, чтоб попасть в нужный диапазон, надо прибавить 18. 0+18 = 18 - нижний предел, 22+18=40 - верхний предел.

 Random random = new Random();
 int digit = random.nextInt(22)+18;
→ Ссылка
Автор решения: Vyacheslav Mishchenko

Для генерации случайного целого в заданном диапазоне, вы можете использовать ThreadLocalRandom из пакета java.util.concurrent.ThreadLocalRandom;

Пример:

for (int x = 0; x < 10; ++x ) {
        
          int min = 4; int max = 77;
          int r = ThreadLocalRandom.current() .nextInt(min, max);
          System.out.println("r = " + r);
       }
       

Ссылка на документацию oracle

→ Ссылка