Uygulama geliştirirken, genellikle rastgele sayılar üretmemiz gerekir. Java, öncelikle java.lang.Math ve java.util.Random sınıfları aracılığıyla rasgele sayılar üretmek için destek sağlar.
Bu yazıda, farklı türdeki gereksinimlere dayalı rastgele sayılar üretmenin farklı yollarını inceleyeceğiz.
Math Sınıfını Kullanarak Rastgele Sayılar
Java rasgele sayılar üretmek için java.util paketindeki Math sınıfını sağlar. Ayrıca Java Rrandom Sayı yazısını inceleyebilirsiniz.
Math sınıfı, double türüden rasgele sayılar üretmek için statik Math.random() yöntemini kullanılabilir.
Random() yöntemi, 0.0’dan büyük veya eşit ve 1.0’dan küçük pozitif işareti olan bir çift değer döndürür. Math.random() öğesini çağırdığınızda,methodun içinde bir java.util.Random sözdendomeni üreteci nesnesi oluşturulur ve kullanılır.
Math.random() yöntemini parametreleri ileterek veya değiştirmeden kullanabilirsiniz. Parametreler sağlarsanız, yöntem verilen parametreler içinde rasgele sayılar üretir.
Math.random() yöntemini kullanmak için kod:
1 2 3 4 | double x = Math.random(); return x; |
Java Belirli Bir Aralıktaki Rastgele Sayılar
Belirli bir aralık arasında rasgele sayılar oluşturmak için aralığı belirtmeniz gerekir. Bunu başarmak için standart bir ifade:
1 2 3 | (Math.random() * ((max - min) + 1)) + min |
Bu ifadeyi adımlara ayıralım:
1- İlk olarak, kapsamasını istediğiniz değer aralığının büyüklüğünü Math.random() tarafından üretilen sonuçla çarpın.
1 2 3 | Math.random () * (max - min) |
max‘ın hariç tutulduğu [0, max – min] aralığında bir değer döndürür. Örneğin, [5,10] istiyorsanız, Math.random () * 5’i kullanabilmeniz için 5 tam sayı değerini kapsamalısınız. Bu, 5’in dahil edilmediği [0,5] aralığında bir değer döndürür.
2- Ardından, bu aralığı hedeflediğiniz aralığa kaydırın. Bunu min değerini ekleyerek yaparsınız.
1 2 3 | (Math.random() * ( max - min )) + min |
Ancak bu yine de maksimum değeri içermez.
3- Maksimum değeri almak için aralık parametrenize 1 (max – min) eklemeniz gerekir. Bu, belirtilen aralıkta rastgele bir çift döndürür.
1 2 3 | double x = (Math.random()*((max-min)+1))+min; |
Yukarıdaki ifadeyi uygulamanın farklı yolları vardır. Birkaç tanesine bakalım.
Bu işlemi bir sınıfa alarak aşağıdaki gibi uygulayabiliriz.
1 2 3 4 5 6 | public static double rastgeleAraliktaSayi(double min, double max){ double x = (Math.random()*((max-min)+1))+min; return x; } |
Hazırlanan metodu kullanmak için yazmamız gereken java kodu:
1 2 3 | rastgeleAraliktaSayi(5.0, 20.0); |
Random Sınıfı Kullanarak Rastgele Sayı Oluşturma
Java.util.Random sınıfını int, float, double, long ve boolean gibi farklı türde rasgele sayılar üretmek için kullanabilirsiniz.
Rasgele sayılar oluşturmak için, önce Random sınıfının bir örneğini oluşturun ve ardından nextInt(), nextDouble() veya nextLong() gibi rasgele değer üreteci yöntemlerinden birini çağırın.
Rastgele’nin nextInt() yöntemi, bağlı bir tamsayıyı kabul eder ve 0 (dahil) ile belirtilen bağlı (özel) arasında rastgele bir tam sayı döndürür.
NextInt() yöntemini kullanmak için kod budur.
1 2 3 4 | Random random = new Random(); random.nextInt(50); |
Belirli Aralıkta Rastgele Sayı Oluşturma
Belirli aralık içinde bir tamsayı oluşturmak için nextInt () yöntemini kullanan kod şudur:
1 2 3 4 5 6 | public static int rastgeleAralik(int min, int max) { Random r = new Random(); return r.nextInt((max - min) + 1) + min; } |
NextFloat() ve nextDouble() yöntemleri, 0.0 ile 1.0 arasında float ve double değerleri üretilmesine izin verir.
Her iki yöntemi kullanmak için kod:
1 2 3 4 5 6 7 8 9 10 | public static double rastgeleDouble(){ Random random = new Random(); return random.nextDouble(); } public static float rastgeleFloat(){ Random random = new Random(); return random.nextFloat(); } |
Son Olarak
Java.util.Random sınıfı genellikle doğrusal bir eşlenik oluşturucu olarak adlandırılanı uygular. Hızlı olacak şekilde tasarlanmıştır ancak bir web sunucusunda benzersiz oturum kimliği oluşturma, bilimsel deneyler, kriptografi veya parasal bir hissenin dahil olduğu piyango ve çekilişler gibi gerçek zamanlı kullanım gereksinimlerini karşılamaz. Bu tür senaryolar için, daha sonraki bir gönderide ele alacağım başka alternatifler var.
Yorum Yap