Bu yaklaşımın bir yaklaşımdan daha önyargılı ve daha az verimli olduğunu unutmayın nextInt
, https://stackoverflow.com/a/738651/360211
Bunu başarmak için standart bir model:
Min + (int)(Math.random() * ((Max - Min) + 1))
Java Matematik kütüphane işlevi Math.random () aralığı içinde bir çift değeri oluşturur [0,1)
. Bu aralığın 1'i içermediğine dikkat edin.
Öncelikle belirli bir değer aralığı elde etmek için, kapsanmasını istediğiniz değer aralığının büyüklüğüyle çarpmanız gerekir.
Math.random() * ( Max - Min )
Bu, aralıktaki [0,Max-Min)
'Maks-Min' değerinin dahil edilmediği bir değer döndürür .
Örneğin [5,10)
, isterseniz beş tamsayı değerini kapsamalısınız.
Math.random() * 5
Bu [0,5)
, 5'in dahil edilmediği aralıktaki bir değer döndürür .
Şimdi bu aralığı hedeflediğiniz aralığa kaydırmanız gerekiyor. Bunu Min değerini ekleyerek yaparsınız.
Min + (Math.random() * (Max - Min))
Artık aralıkta bir değer elde edeceksiniz [Min,Max)
. Örneğimizden sonra bu şu anlama gelir [5,10)
:
5 + (Math.random() * (10 - 5))
Ancak, bu hala içermiyor Max
ve iki kat değer elde ediyorsunuz. Max
Dahil edilen değeri elde etmek için, aralık parametrenize 1 eklemeniz (Max - Min)
ve daha sonra bir int'e döküm yaparak ondalık kısmı kesmeniz gerekir. Bu, şu şekilde gerçekleştirilir:
Min + (int)(Math.random() * ((Max - Min) + 1))
İşte buyur. Aralıktaki [Min,Max]
veya örnek başına rastgele bir tamsayı değeri [5,10]
:
5 + (int)(Math.random() * ((10 - 5) + 1))