Mam dwa podwójne, jak poniżej
double min = 100;
double max = 101;
a za pomocą generatora losowego muszę utworzyć podwójną wartość między zakresem min i max.
Random r = new Random();
r.nextDouble();
ale nie ma tu nic, gdzie moglibyśmy określić zakres.
double rangeMax= Double.MAX_VALUE;
idouble rangeMin= -rangeMax;
będziesz zawsze nieskończoną wartość w zamian. Możesz chcieć sprawdzićDouble.valueOf(rangeMax-rangeMin).isInfinite()
.rangeMin
irangeMax
jest duży, może między nimi znajdować się 10 000 000 odrębnych podwójnych wartości. Wynik(rangeMax - rangeMin) * r.nextDouble()
wybierze tylko pomiędzy 10 000 z tych 10 000 000 możliwych wartości. (Czuję, że to nie jest idealne wyjaśnienie, ale może trochę pomaga ...)To pytanie zostało zadane przed wydaniem Java 7, ale teraz istnieje inny możliwy sposób wykorzystania API Java 7 (i nowszych):
nextDouble
zwróci pseudolosową wartość double między minimum (włącznie) a maksimum (wyłączność). Granice niekoniecznie sąint
i mogą byćdouble
.źródło
Użyj tego:
EDYTOWAĆ:
new Random().nextDouble()
: losowo generuje liczbę od 0 do 1.start
: numer początkowy, aby przesunąć numer „w prawo”end - start
: interwał. Random daje od 0% do 100% tej liczby, ponieważ random daje liczbę od 0 do 1.EDYCJA 2: Tks @daniel i @aaa bbb. Moja pierwsza odpowiedź była błędna.
źródło
źródło
źródło
Główną ideą losowości jest to, że zwraca wartość pseudolosową. Nie ma czegoś takiego jak w pełni losowe funkcje, dlatego 2 losowe instancje używające tego samego ziarna zwrócą tę samą wartość w określonych warunkach.
Dobrą praktyką jest najpierw przejrzenie dokumentu funkcji, aby go zrozumieć ( https://docs.oracle.com/javase/8/docs/api/java/util/Random.html )
Teraz, gdy rozumiemy, że zwrócona wartość funkcji nextDouble () jest wartością pseudolosową z przedziału od 0,0 do 1,0, możemy to wykorzystać na naszą korzyść.
Aby utworzyć liczbę losową między A i B, aby stwierdzić, że granice są prawidłowe (A> B), musimy: 1. znaleźć zakres między A i B, abyśmy mogli wiedzieć, ile mamy „kroków”. 2. użyj funkcji losowej, aby określić, ile kroków należy wykonać (ponieważ zwrócona wartość zawiera się między 0,0 a 1,0, możesz o tym myśleć jako o „wybierz losowy procent wzrostu” 3. dodaj przesunięcie
Po tym wszystkim możesz zobaczyć, że mafia dał ci najłatwiejszy i najpopularniejszy sposób, moim zdaniem
double randomValue = rangeMin + (rangeMax - rangeMin) * r.nextDouble ();
double RandomValue = Offset + (Range) * (randomVal pomiędzy 0,0-1,0)
źródło