JavaScript'te belirli bir aralıkta rastgele tam sayılar oluşturma?
JavaScript'te belirtilen iki değişken arasında rastgele tam sayıları nasıl oluşturabilirim, örneğin x = 4
ve y = 8
, 4, 5, 6, 7, 8
den herhangi birini çıkarır?
1823
3
Mozilla Geliştirici Ağı]1 sayfasında bazı örnekler bulunmaktadır:
Bunun arkasındaki mantık şu. Bu basit bir üç kuralı:
Math.random()
0 (dahil) ile 1 (hariç) arasında bir
Sayı` döndürür. Yani şöyle bir aralığımız var:Şimdi,
min
(dahil) vemaks
(hariç) arasında bir sayı istiyoruz:Karşılığı [min, max) aralığında almak için
Math.random
kullanabiliriz. Ancak, önce ikinci aralıktanmin
i çıkararak problemi biraz çarpanlarına ayırmalıyız:Bu verir:
Şimdi `Math.random' uygulayabilir ve ardından karşılık gelen değeri hesaplayabiliriz. Rastgele bir sayı seçelim:
Yani,
x
değerini bulmak için şunu yapmalıyız:Min`i geri eklemeyi unutmayın, böylece [min, max) aralığında bir sayı elde ederiz:
Bu MDN'nin ilk işleviydi. İkincisi, her ikisi de dahil olmak üzere
min
vemaks
arasında bir tamsayı döndürür.Şimdi tamsayıları almak için
round
,ceil
veyafloor
kullanabilirsiniz.Math.round(Math.random() * (max - min)) + min
kullanabilirsiniz, ancak bu eşit olmayan bir dağılım verir. Hem
minhem de
maks` sadece yaklaşık olarak yarı yarıya atma şansına sahiptir:Max
aralıktan çıkarıldığında,
min`den daha az atma şansı vardır.Math.floor(Math.random() * (max - min +1)) + min` ile tamamen eşit bir dağılıma sahip olursunuz.
Bu denklemde
ceil()
ve-1
kullanamazsınız çünkümax
ın artık biraz daha az atma şansı vardır, ancak (istenmeyen)min-1
sonucunu da atabilirsiniz.kullanım:
Bu işlevi ve bu işlevin varyasyonlarını test etmek için aşağıdaki HTML/JavaScript'i bir dosyaya kaydedin ve bir tarayıcı ile açın. Kod, bir milyon fonksiyon çağrısının dağılımını gösteren bir grafik üretecektir. Kod ayrıca uç durumları da kaydedecektir, böylece fonksiyon maksimumdan büyük veya minimumdan küçük bir değer üretirse, bundan.haberiniz.olacaktır.