de kirupa cu codul de Scott Ruttencutter | filed under JavaScript 101
Aflați cum de a genera o serie de numere aleatoare care nu se încadrează doar într-o superioară și inferioară gama specifica, dar frecvența cu care fiecare număr apare este corect si echilibrat! pentru multe situații, de la operațiuni de aruncare a monedelor la animații procedurale, veți dori să lucrați cu numere ale căror valori sunt puțin imprevizibile., Veți dori să lucrați cu numere aleatorii. Generarea unui număr aleatoriu este ușor. Este încorporat în JavaScript și expus prin matematica infamă.aleator () funcție. Acum, dacă această funcție există deja, ce mai facem aici? Ei bine, utilizarea funcției este doar o parte din a putea genera un număr aleatoriu. Pentru cele mai multe situații din viața reală, nu vrem orice număr aleatoriu. Vom dori un anumit tip de număr aleatoriu – unul care se încadrează într-un interval pe care îl definim. Există câteva gotchas subtile cu asta, și asta vor explora restul acestor secțiuni.
înainte!,
doar arată-mi Codul
înainte de a mă arunca cu capul în detalii, dacă tot ce vrei este codul pentru generarea unui număr întreg aleatoriu într-un interval stabilit, utilizați matematica.random() cu următoarea formulă:
Math.floor(Math.random() * (1 + High - Low)) + Low
valoarea Mare este cel mai mare număr aleator doriți să genereze. Valoarea pentru low este cel mai mic număr aleatoriu pe care doriți să îl generați în schimb. Când executați acest cod, ceea ce veți obține este un număr care se încadrează în mod aleatoriu undeva între limitele specificate de înaltă și joasă.,
Aici sunt câteva exemple:
Pentru a face lucrurile simple, aici este o funcție puteți folosi în loc:
function getRandomNumber(low, high) { let r = Math.floor(Math.random() * (high - low + 1)) + low; return r;}
sună getRandomNumber și să treacă în partea inferioară și limita superioară ca argumente:
Asta e tot acolo este de a genera un număr aleator care se încadrează într-un interval pe care îl specificați.
adăugarea de 1 explicat
în JavaScript, matematică.,random() returnează un număr mai mare sau egal cu 0, dar mai mică decât 1:
un Alt mod de a afirmând este (0 <= n < 1) unde n este numărul arelooking pentru. Această incapacitate de matematică.aleatoare pentru a obține într-adevăr foarte aproape de 1, dar niciodată destul de a ajunge acolo este în mare măsură de ce obținerea unui număr aleatorîntre o serie de numere este așa…neelegant:
Math.floor(Math.random() * (1 + High - Low)) + Low
privind abordarea noastră un pic mai departe, să începem cu cea mai mare ciudățenie, adăugarea 1. Iată de ce îl includem., Am afirmat deja de multe ori că matematica.aleator () funcția va neverreturn un 1 ca valoare. Se va întoarce ceva aproape ca.9999999, dar nu va fi niciodată un 1. De asemenea, dorim un număr rotund care să nu includă zecimale. Există mai multe abordări pentru rotunjirea unui număr, dar rotunjim output-ul prin matematică.etajul unde ne întoarcem până la cel mai apropiatinteger. Această rotunjire este problema.
dacă nu am adăuga 1, din cauza modului în care matematica.lucrări de podea, nu va primi niciodatărăspunsul maxim posibil atunci când înmulțim rezultatul High – Low prin matematică.la întâmplare ()., Acest lucru, probabil, nu face o mulțime de sens, așa că să ne uităm la un exemplu în cazul în care încercarea de a obține un număr aleatoriu, fără a adăuga 1.ceea ce vrem să facem este să generăm un număr aleatoriu între 10 și 50. Ignorând 1, Aceasta este ceea ce expresia va arata ca:
Math.floor(Math.random() * 40) + 10
matematica.aleator () * 40 nu se va întoarce un 40 pentru că thatwould nevoie de matematica.aleator () pentru a reveni un 1…să fim optimiști și să spunem matematica.aleator () returnează un .9999, și înmulțim această valoare cu 40. Valoarea returnată va fi 39.996. Ghici ce matematica.etajul 39.,996 va fi? Va fi 39! Când acest 39 se adaugă la 10, veți obține avalue de 49. Nu aveți nici o modalitate imaginabilă de a obține un răspuns de 50, care este numărul mare din gama dvs. de valori. Singura soluție este de a adăuga un 1 la theoperation:
Math.floor(Math.random() * 41) + 10
Odată ce faci asta, va fi capabil de a genera toate numerele din therange de numere mari și mici, de 10 și 50, respectiv, cu frecvență egală.
concluzie
generarea corectă a numerelor aleatorii este o problemă dificilă., Pare foarte simplu, dar obținerea gamei de numere nu numai corecte, ci și cu frecvență egală este locul în care se întâmplă provocările. Atâta timp cât sunteți conștienți de limitările diferitelor metode de rotunjire, puteți înlocui matematica.etaj cu matematica.ceil sau, dacă sunteți într-adevăr îndrăzneț, matematica.rotund.
aveți o întrebare sau doriți doar să discutați? Comentariu de mai jos sau picătură de forumuri noastre (acestea sunt de fapt același lucru!) în cazul în care o grămadă de cei mai prietenoși oameni pe care îi veți întâlni vreodată va fi fericit să vă ajute!,când Kirupa nu este ocupat să scrie despre el însuși la persoana a 3-a, el practică distanțarea socială…chiar și pe profilurile sale Twitter, Facebook și LinkedIn.
Hit Aboneaza-te pentru a obține sfaturi interesante, trucuri, selfies, și mai personal livrate manual în căsuța de e-mail.