Зауважте, що цей підхід є більш упередженим та менш ефективним, ніж 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))