Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

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

Быстрый ответ

Для получения случайного числа из определенного диапазона вы можете использовать метод nextInt класса Random:

Java
Скопировать код
int randomNum = new Random().nextInt(max – min + 1) + min;

Вместо min и max укажите начало и конец вашего диапазона соответственно, чтобы получить результатом число, входящее в этот диапазон, включая оба конца.

Кинга Идем в IT: пошаговый план для смены профессии

Диапазоны и границы: как учитывать пределы

Класс Random генерирует числа в установленных границах. Если начальное значение вашего диапазона отличается от нуля, учтите это в формуле следующим образом:

Java
Скопировать код
Random r = new Random();
int min = 5;
int max = 15;
int randomInclusive = r.nextInt(max – min + 1) + min; // Верхняя граница включена
int randomExclusive = r.nextInt(max – min) + min;     // Верхняя граница исключена

"Невключающий диапазон" не охватывает верхнюю границу в отличие от "включающего диапазона", который её ограничивает.

За кулисами: возможности класса Random

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

Визуализация

Предположим, что вы бросаете игральный кубик с числами от 10 до 20 включительно:

Java
Скопировать код
int min = 10;
int max = 20;
int randomNum = min + (int)(Math.random() * ((max – min) + 1)); // Мы бросили кубик!

Результат каждого броска мы можем описать следующим образом:

Markdown
Скопировать код
🎲 Крутится... (10-20)

Результаты:
| Бросок | Число  |
| ------ | ------ |
| 1      | 14     |
| 2      | 10     |
| 3      | 20     |

Диапазон определяют значения min и max, а бросок кубика аналогичен вызову метода Math.random() в нашем Android-приложении.

Другие способы генерации случайных чисел

Если вам не подходит класс Random, существуют и другие методы генерации случайных чисел:

ThreadLocalRandom (подходит для многопоточных приложений):

Java
Скопировать код
int randomNum = ThreadLocalRandom.current().nextInt(min, max + 1);

SecureRandom (более безопасен):

Java
Скопировать код
SecureRandom secureRandom = new SecureRandom();
int randomNum = secureRandom.nextInt(max – min + 1) + min;

ints (используется с API-интерфейсами Java 8 stream):

Java
Скопировать код
int randomNum = Random.ints(min, max + 1).findFirst().getAsInt();

Как выбрать подходящий инструмент: Random vs SecureRandom vs ThreadLocalRandom

Выбор конкретного метода зависит от ваших потребностей: SecureRandom используется для криптографических задач, ThreadLocalRandom — в многопоточных приложениях, а Random идеальный выбор для общих нужд без особых требований.

Берегитесь возможных проблем

Напоминаем об осторожности при работе со случайными числами:

  • Боязнь максимума: Добавьте +1, чтобы включить верхнюю границу диапазона.
  • Некорректные границы: Обязательно проверьте, что max больше, чем min.
  • Большие диапазоны: Работая с большими диапазонами, учтите такие аспекты, как распределение псевдослучайных чисел и производительность.

Полезные материалы

  1. Random | Android Developers — официальная документация Android по классу Random.
  2. Как сгенерировать случайное целое число в заданном диапазоне в Java? – Stack Overflow — решения и обсуждения на Stack Overflow.
  3. Baeldung – Генерация случайных чисел в Java — статьи Baeldung с практическими советами.
  4. Random (Java Platform SE 8 ) — документация по классу Random.
  5. Math (Java Platform SE 7 ) — информация о функции Math.random.
  6. Java Random Number Generator – DigitalOcean — обучающий материал по генерации случайных чисел в Java от DigitalOcean.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой метод используется для генерации случайного числа в заданном диапазоне на Android?
1 / 5