Зауважте, що цей підхід є більш упередженим та менш ефективним, ніж nextInt
підхід, https://stackoverflow.com/a/738651/360211
Одним із стандартних схем для цього є:
Min + (int)(Math.random() * ((Max - Min) + 1))
Функція бібліотеки Java Math Math.random () генерує подвійне значення в діапазоні [0,1)
. Зверніть увагу, що цей діапазон не включає 1.
Щоб спочатку отримати конкретний діапазон значень, вам потрібно помножити на величину діапазону значень, який потрібно охопити.
Math.random() * ( Max - Min )
Це повертає значення в діапазоні [0,Max-Min)
, де "Max-Min" не включений.
Наприклад, якщо ви хочете [5,10)
, вам потрібно покрити п'ять цілих значень, щоб ви їх використовували
Math.random() * 5
Це поверне значення в діапазоні [0,5)
, де 5 не включено.
Тепер вам потрібно зрушити цей діапазон до діапазону, на який ви орієнтовані. Це ви робите, додаючи значення Min.
Min + (Math.random() * (Max - Min))
Тепер ви отримаєте значення в діапазоні [Min,Max)
. Наслідуючи наш приклад, це означає [5,10)
:
5 + (Math.random() * (10 - 5))
Але це все ще не включає, Max
і ви отримуєте подвійне значення. Для того, щоб Max
включити значення, вам потрібно додати 1 до параметра діапазону, (Max - Min)
а потім обрізати десяткову частину, відкинувши до int. Це здійснюється за допомогою:
Min + (int)(Math.random() * ((Max - Min) + 1))
І ось у вас це є. Випадкове ціле значення в діапазоні [Min,Max]
або на прикладі [5,10]
:
5 + (int)(Math.random() * ((10 - 5) + 1))