Miért ezzel az értékkel kell? [JavaScript]
Csináltam egy lotto szám generátort, itt van a forráskód.
<html>
<head>
<title>Lotto</title>
<script>
var szam = [];
for (i=1; i<91; i++) {
szam[i-1]=i;
}
function veletlen_szam(a,b) {
return 0.5 - Math.random();
}
szam.sort(veletlen_szam);
var lotto = [];
for (i=0; i<6; i++) {
lotto[i-1]=szam[i-1];
}
document.write(lotto);
</script>
</head>
<body>
</body>
</html>
Az lenne a kérdésem hogy veletlen_szam fügvényben miért 0.5 el kell kivonni a Math.random()-ot.
Ha te csináltad, nem tudod?:)
Ott éppen "spórolt" a fejlesztő pár sort, cserébe nehezebben áttekinthető a kód. Két dolgot kell megértéséhez: hogy működik az array.sort illetve a Math.random().
Array.sort-nak át tudsz adni egy comparing functiont, amelyet a sorbarendezés során fog használni összehasonlításokhoz. Ennek a függvénynek úgy kell működnie, hogyha a két paramétere (X és Y) közül X-et akarod Y elé mozgatni sorrendezés során, akkor 0-nál kisebb számmal térsz vissza, ha X-et Y után akarod mozgatni, akkor 0-nál nagyobbal, ha nem akarod módosítani a sorrendet, 0-t. Ez az összehasonlító függvény az általad írt kódban a 'veletlen_szam'.
A Math.random() funkció 0 és 1 közötti számot generál egyenletes eloszlással. Ezt félből levonva ugye -0.5 és 0.5 közötti számot kapsz, és ezt adod vissza a 'veletlen_szam' függvényben visszatérési értékként, amely az összehasonlító függvény működése miatt azt eredményezi, hogy véletlenszerűen lesznek rendezve az elemek.
Tehát mit csinál az egész? Összekeveri a 'szam' tömb tartalmát (mivel véletlenszerűen "rendezi"), aztán kiválasztja az első ötöt, amely így véletlenszerű lesz (1 és 90 között természetesen). Nem mondom, egyszerűbben is meg lehetett volna oldani.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!