To jest całkiem proste pytanie dotyczące języka Java (choć prawdopodobnie ma zastosowanie do każdego programowania):
Math.random()
zwraca liczbę od zera do jednego.
Jeśli chcę zwrócić liczbę całkowitą od zera do setki, zrobiłbym:
(int) Math.floor(Math.random() * 101)
Pomiędzy stu a stu zrobiłbym:
(int) Math.ceil(Math.random() * 100)
Ale co jeśli chciałbym uzyskać liczbę od trzech do pięciu? Czy będzie to takie stwierdzenie:
(int) Math.random() * 5 + 3
Wiem o nextInt()
w java.lang.util.Random
. Ale chcę się nauczyć, jak to zrobić Math.random()
.
(int)Math.floor(Math.random()*3) + 3
Math.ceil
jest źle, to daje zły wynik, gdyMath.random()
powróci0
.Odpowiedzi:
Wyjście
randomWithRange(2, 5)
10 razy:Granice są włącznie, tj. [2,5] i
min
muszą być mniejsze niżmax
w powyższym przykładzie.EDIT: Jeśli ktoś zamierza spróbować i być głupi i do tyłu
min
imax
, można zmienić kod do:EDIT2: W przypadku pytania dotyczącego
double
s to po prostu:I znowu, jeśli chcesz to udowodnić idiotom, po prostu:
źródło
(int)
i chcesz, aby zwracaładouble
?int
s nadouble
s (a rzutowanie typu jest niepotrzebne). Zakładałem, że chcesz,int
ale dodam do mojego postu.double
s usuń+ 1
również, ponieważMath.random()
nie jest obcięty. Jednak zakres będzie wynosił [min, max), ponieważMath.random
„Zwraca podwójną wartość ze znakiem dodatnim, większą lub równą 0,0 i mniejszą niż 1,0”.max
Prawdopodobieństwo, że liczba i tak będzie dokładnie taka sama, jak i tak byłaby minimalne, nawet gdyby było to możliwe.Jeśli chcesz wygenerować liczbę od 0 do 100, Twój kod będzie wyglądał następująco:
Aby wygenerować liczbę od 10 do 20:
W ogólnym przypadku:
(gdzie
lowerbound
jest włączający iupperbound
wyłączny).Włączenie lub wyłączenie
upperbound
zależy od Twojego wyboru. Powiedzmy, żerange = (upperbound - lowerbound) + 1
wtedyupperbound
jest włączający, ale jeślirange = (upperbound - lowerbound)
toupperbound
jest wyłączny.Przykład: Jeśli chcę liczbę całkowitą między 3-5, to jeśli zakres wynosi (5-3) +1, to 5 jest włącznie, ale jeśli zakres wynosi tylko (5-3), to 5 jest wyłączne.
źródło
upperbound
Ekskluzywny? Myślę, że będzie to obejmujące.Random
Klasa Java znajduje się wjava.util
pakiecie będzie służyć swój cel lepiej. Ma kilkanextInt()
metod, które zwracają liczbę całkowitą. Ten, który przyjmuje argument int, wygeneruje liczbę od 0 do tego int, druga nie jest włącznie.źródło
Math.random()
. Dzięki.Aby wygenerować liczbę od 10 do 20 włącznie, możesz użyć
java.util.Random
źródło
Oto metoda, która przyjmuje granice i zwraca losową liczbę całkowitą. Jest nieco bardziej zaawansowany (całkowicie uniwersalny): granice mogą być zarówno dodatnie, jak i ujemne , a granice minimalne / maksymalne mogą występować w dowolnej kolejności.
Ogólnie rzecz biorąc, znajduje bezwzględną odległość między granicami, pobiera odpowiednią wartość losową, a następnie przesuwa odpowiedź na podstawie dolnej granicy.
źródło