new Random() ile yeni bir
Random nesnesi oluşturmak her seferinde bilgisayarınızın saatine göre rastgele sayı oluşturma işlemini yeniden ayarlanıyor. Bundan sonra
Next yöntemini çağırdığınızda aldığınız sonuç sonraki
new Random() ve
Next ile alacağınız sonucun aynısı oluyor.
Bunun bir kaç çözümü var. En basitleri şunlar:
1. Tek bir
Random nesnesi oluşturup, aynı nesne üzerinden Next yöntemini çağırın.
Örnek :
class Program
{
static void Main(string[] args)
{
Random r = new Random();
for (int i=0; i<100; i++) {
Console.WriteLine(r.Next(1, 1000));
}
Console.ReadKey();
}
}
2. Bu şekilde çağırmak istemezseniz ve illaki bir fonksiyon isterseniz şöyle bir şey yapabilirsiniz:
Örnek:
// Şöyle bir statik sınıf oluşturun.
public static class Cesitli
{
public static readonly Random r = new Random();
public static readonly Object kilitlemeNesnesi = new Object();
// Rastgele sayı üreten fonksiyon
public static int rastgeleSayi(int alt, int ust) {
lock(kilitlemeNesnesi) {
return random.Next(min, max);
}
}
}
// Kullanımı
class Program
{
static void Main(string[] args)
{
for (int i=0; i<100; i++) {
Console.WriteLine(Cesitli.rastgeleSayi(1, 1000));
}
Console.ReadKey();
}
}
Bu örnekteki
lock,
Random nesnesi statik tanımlandığından, aynı fonksiyon başka bir iş parçası (thread) tarafından çağırılabileceği için kullanılıyor. Bilmiyorsanız
lock (kilit) işini ayrıca incelemelisiniz. Özellikle web sitesi gibi bir ortamda kullanıyorsanız bu gerekli.
Bunların haricinde
şurada başka yollar da belirtilmiş.