Відповіді:
Щоб генерувати випадкове значення між rangeMinта rangeMax:
Random r = new Random();
double randomValue = rangeMin + (rangeMax - rangeMin) * r.nextDouble();
rangeMinі rangeMaxвеликий, то між ними може бути 10 000 000 різних подвійних значень. Результат (rangeMax - rangeMin) * r.nextDouble()буде вибирати лише між 10 000 з тих можливих 1000000000 значень. (Я відчуваю , що це не ідеальне пояснення, але , можливо , це допоможе трохи ...)
Це питання було задано перед випуском Java 7, але тепер є ще один можливий спосіб використання API Java 7 (і вище):
double random = ThreadLocalRandom.current().nextDouble(min, max);
nextDoubleповерне псевдовипадкове подвійне значення між мінімальним (включно) і максимальним (виключним). Межі не обов'язково int, і можуть бути double.
Використовуй це:
double start = 400;
double end = 402;
double random = new Random().nextDouble();
double result = start + (random * (end - start));
System.out.println(result);
Редагувати:
new Random().nextDouble(): випадковим чином генерує число між 0 і 1.
start: початковий номер, щоб змістити номер "вправо"
end - start: інтервал. Випадковий дає вам від 0% до 100% від цього числа, тому що випадковий дає вам число від 0 до 1.
EDIT 2: Tks @daniel та @aaa bbb. Моя перша відповідь була неправильною.
import java.util.Random;
public class MyClass {
public static void main(String args[]) {
Double min = 0.0; // Set To Your Desired Min Value
Double max = 10.0; // Set To Your Desired Max Value
double x = (Math.random() * ((max - min) + 1)) + min; // This Will Create A Random Number Inbetween Your Min And Max.
double xrounded = Math.round(x * 100.0) / 100.0; // Creates Answer To The Nearest 100 th, You Can Modify This To Change How It Rounds.
System.out.println(xrounded); // This Will Now Print Out The Rounded, Random Number.
}
}
Основна ідея випадкового полягає в тому, що він повертає псевдовипадкове значення. Не існує такого поняття, як повністю випадкові функції, отже, 2 випадкові екземпляри, що використовують одне і те ж насіння, повернуть те саме значення в певних умовах.
Спочатку добре переглянути функцію doc, щоб зрозуміти її ( https://docs.oracle.com/javase/8/docs/api/java/util/Random.html )
Тепер, коли ми розуміємо, що повернене значення функції nextDouble () є псевдовипадковим значенням від 0,0 до 1,0, ми можемо використовувати це на нашу користь.
Щоб створити випадкове число між A і B, яке означає, що межі є дійсними (A> B), ми повинні: 1. знайти діапазон між A і B, щоб ми могли знати, як багато "кроків" у нас. 2. використовуйте випадкову функцію, щоб визначити, скільки кроків зробити (оскільки повернене значення знаходиться в межах від 0,0 до 1,0, ви можете вважати це як "вибір випадкового відсотка збільшення") 3. додайте зміщення
Зрештою, ви можете бачити, що цей моб дав вам найпростіший і найпоширеніший спосіб зробити це, на мою думку
подвійний randomValue = rangeMin + (rangeMax - rangeMin) * r.nextDouble ();
подвійний RandomValue = Зсув + (Діапазон) * (randomVal між 0,0-1,0)
double rangeMax= Double.MAX_VALUE;іdouble rangeMin= -rangeMax;ви завжди будете отримувати нескінченне значення натомість. Ви можете перевіритиDouble.valueOf(rangeMax-rangeMin).isInfinite().