- написана командою Vertex Academy. Сподіваємося, що вона Вам буде корисна. Приємного прочитання!
- це одна зі статей з нашого "Самовчителя по Java"
Генерація випадкових чисел в Java - важлива і потрібна тема. Дійсно, вона Вам знадобиться незліченну кількість разів.
- при заповненні масиву випадковими числами
- при перетасування колоди карт
- при виборі випадкового елемента з послідовності
- і т.д.
Давайте ж розберемося з цією темою.
Існує кілька способів як згенерувати випадкове число. У цій статті ми розглянемо генерацію чисел за допомогою Math.random ()
У бібліотеці класів Java є пакет java.lang, у якого є клас Math, а у класу Math є метод random (). Див. Картинку нижче в допомогу.
Так ось, при кожному виклику Math.random () c допомогою спеціального алгоритму (за певною інструкцією) генерується випадкове число. Чи можна передбачити яке число буде згенеровано? Теоретично це можливо, але це дуже важко зробити. А оскільки все-таки існує невелика ймовірність передбачити, яке ж число буде згенеровано алгоритмом, такі числа прийнято називати не випадковими, а псевдовипадковими.
Ви повинні знати 3 моменти:
1. За замовчуванням Math.random () генерує випадкові речові числа з проміжку [0; 1), тобто від нуля включно до 1 виключно.
"До 1 виключно" - це означає, що Math.random () не може згенерувати число 1. Хіба що 0,999 - тобто будь-яке число менше 1.Спробуйте запустити на своєму комп'ютері ось цей код і самі побачите, що в консоль будуть виводитися речові числа від 0 до будь-якого числа, менше 1.
Крок №1: Діапазон [0; 1) множимо на 3. Відповідно,
Нижня межа: 0 * 3 = 0
Верхня межа: 1 * 3 = 3
Отримали діапазон [0; 3). Дужка після числа 3 кругла. Це означає, що 3 не входить в діапазон, тобто максимальне число, яке може бути створене в цьому діапазоні це 2,999. Одним словом - ми маємо справу з речовими (дробовими) числами.
Крок №2: Тому застосовуємо (int) перед Math.random () * 3. Дрібна частина відсікається і ми отримуємо діапазон [0; 2]
Якщо розглянути нашу формулу, то вона не дуже сильно зміниться.
У разі, якщо дійсне число, і верхній діапазон включає b - [a; b]:
(Math.random () * (b - a + 1) + a
Якщо ще і тільки цілі числа:
(Int) ((Math.random () * (b - a + 1) + a)
Якщо необхідно згенерувати число з інтервалу [3; 4]. Зверніть увагу, що після 4 дужка квадратна. Це означає, що нас цікавить, щоб діапазон включав в себе число 4. Як це зробити? Ось так:
Крок №1: Діапазон [0; 1) множимо на 2. Відповідно,
Нижня межа: 0 * 2 = 0
Верхня межа: 1 * 2 = 2
Отримали діапазон [0; 2). Дужка після числа 2 кругла. Це означає, що 2 не входить в діапазон, тобто максимальне число, яке може бути створене в цьому діапазоні це 1,999. А це значить, що ми маємо справу з речовим (дробовим) числом.
Крок №2: Тому застосовуємо (int) перед Math.random () * 2. Дрібна частина відсікається і ми отримуємо діапазон [0; 1]. Зверніть увагу - діапазон вже по число 1 включно.
Крок №3: Далі до діапазону [0; 1] додаємо 3. Відповідно,
Нижня межа: 0 + 3 = 3
Верхня межа: 1 + 3 = 4
Отримали новий діапазон [3; 4]
(Int) (Math.random () * (4 - 3 + 1) + 3) => (int) (Math.random () * 2 + 3)
Цілочисельне значення в інтервалі [-100; +100] (100 включно):