Daugiau
Atsitiktinių sveikųjų skaičių generavimas "JavaScript" programoje tam tikrame intervale?
Kaip "JavaScript" kalba generuoti atsitiktinius sveikus skaičius tarp dviejų nurodytų kintamųjų, pvz., x = 4
ir y = 8
, kad išeitų bet kuris iš 4, 5, 6, 7, 8
?
1823
3
Keletas pavyzdžių pateikta Mozilla Developer Network puslapyje:
Štai tokia logika. Tai paprasta trijų dalių taisyklė:
Matas.random()` grąžina skaičių nuo 0 (imtinai) iki 1 (išimtinai). Taigi turime tokį intervalą:
Dabar norėtume gauti skaičių tarp
min
(imtinai) irmax
(išimtinai):Galime naudoti
Math.random
, kad gautume atitikmenį intervale [min, max]. Tačiau pirmiausia turėtume šiek tiek sumažinti problemą, atimdamimin
iš antrojo intervalo:Gauname:
Dabar galime taikyti
Math.random
ir apskaičiuoti atitikmenį. Pasirinkime atsitiktinį skaičių:Taigi, norėdami rasti
x
, turėtume atlikti šiuos veiksmus:Nepamirškite pridėti
min
, kad gautume skaičių intervale [min, max]:Tai buvo pirmoji funkcija iš MDN. Antroji funkcija grąžina sveikąjį skaičių tarp
min
irmax
, abu įskaitytinai.Dabar, norėdami gauti sveikuosius skaičius, galite naudoti
round
,ceil
arbafloor
.Galite naudoti
Math.round(Math.random() * (max - min)) + min
, tačiau taip gaunamas nelygus pasiskirstymas. Tiekmin
, tiekmax
turi tik maždaug pusę tikimybės mesti:Iš intervalo išbraukus
max
, tikimybė, kad jis kris, yra dar mažesnė neimin
.Su
Math.floor(Math.random() * (max - min +1)) + min
turite visiškai tolygų pasiskirstymą.Šioje lygtyje negalite naudoti
ceil()
ir-1
, nesmax
dabar turėjo šiek tiek mažesnę tikimybę, bet galite mesti ir (nepageidaujamą)min-1
rezultatą.naudojimas:
Norėdami išbandyti šią funkciją ir jos variantus, išsaugokite toliau pateiktą HTML/JavaScript į failą ir atidarykite naršyklėje. Kodas sukurs grafiką, rodantį milijono funkcijos iškvietimų pasiskirstymą. Kodas taip pat užfiksuos kraštinius atvejus, todėl jei funkcija sukurs didesnę nei maksimali arba mažesnę nei minimali reikšmę, apie tai sužinosite.