Vairāk
Nejaušinātu veselu skaitļu ģenerēšana JavaScript programmā noteiktā diapazonā?
Kā es varu ģenerēt nejaušus veselus skaitļus starp diviem norādītajiem mainīgajiem JavaScript, piemēram, x = 4
un y = 8
, lai izvadītu jebkuru no 4, 5, 6, 6, 7, 8
?
1823
3
Daži piemēri ir atrodami Mozilla Developer Network lapā:
Lūk, kāda ir tā loģika. Tas ir vienkāršs trīs likums:
Math.random()
atgriežskaitli
starp 0 (ieskaitot) un 1 (izslēdzot). Tātad mums ir šāds intervāls:Tagad mēs vēlamies skaitli starp
min
(ieskaitot) unmax
(izslēdzot):Mēs varam izmantot
Math.random
, lai iegūtu atbilstošo skaitli intervālā [min, max]. Bet vispirms mums vajadzētu mazliet izlīdzināt problēmu, atņemotmin
no otrā intervāla:Tādējādi iegūstam:
Tagad varam izmantot
Math.random
un aprēķināt atbilstošo. Izvēlēsimies nejaušu skaitli:Tātad, lai atrastu
x
, mēs izdarītu:Neaizmirstiet pievienot atpakaļ
min
, lai iegūtu skaitli intervālā [min, max]:Tā bija pirmā funkcija no MDN. Otrā atgriež veselu skaitli starp
min
unmax
, abus ieskaitot.Lai iegūtu veselos skaitļus, var izmantot
round
,ceil
vaifloor
.Varētu izmantot
Math.round(Math.random() * (max - min)). + min
, tomēr tas dod nevienmērīgu sadalījumu. Ganmin
, ganmax
ir tikai aptuveni puse no izlozes iespējām:Izslēdzot
max
no intervāla, tam ir vēl mazāka izredzes izkrīt nekāmin
.Ar
Math.floor(Math.random() * (max - min +1)) + min
ir pilnīgi vienmērīgs sadalījums.Šajā vienādojumā nevar izmantot
ceil()
un-1
, jomax
tagad bija nedaudz mazāka iespēja, bet var izspēlēt arī (nevēlamo)min-1
rezultātu.izmantošana:
Lai pārbaudītu šo funkciju un tās variācijas, saglabājiet zemāk redzamo HTML/JavaScript failā un atveriet to pārlūkprogrammā. Kods izveidos grafiku, kurā būs redzams viena miljona funkcijas izsaukumu sadalījums. Kods reģistrēs arī malējos gadījumus, tāpēc, ja funkcija radīs vērtību, kas ir lielāka par maksimālo vai mazāka par minimālo, jūs.par.to.uzzināsiet.