Ardarda rasgele sayı

Bir döngü içerisinde birbirinden farklı rasgele sayıya ürettiğinizde sayıların neredeyse aynı olduğunu göreceksiniz. Rasgele sayı üretiminde kullanılan algoritmadaki parametreler sistem saatinden alındığı için döngü içerisinde üretilen sayılar birbirine çok yakın yada aynı olacaktır.

Bunu engellemek için döngü içinde System.Threading.Thread.Sleep(123); yazıp döngüyü biraz yavaşlatıp sistem saatinin değişmesini bekleyebilirsiniz ancak. Bu programınızın oldukça yavaşlamasına neden olacaktır.

Daha hızlı bir yöntem için ise aşağıdaki biri Random sınıfına bir Seed değeri atayabilirsiniz :  

System.Text.StringBuilder sb = new System.Text.StringBuilder();

for (int i = 0; i < 1000; i++)
{
    byte[] RandomBytes = new byte[4];
    System.Security.Cryptography.
RNGCryptoServiceProvider rng;
    rng =
new System.Security.Cryptography.RNGCryptoServiceProvider();
    rng.GetBytes(RandomBytes);
    // Convert 4 bytes into a 32-bit integer value.
    int Seed = (RandomBytes[0] & 0x7f) << 24 | RandomBytes[1] << 16 | RandomBytes[2] << 8 | RandomBytes[3];
    Random Rnd = new Random(Seed);
    int rasgele = Rnd.Next(1, 10);
    sb.AppendFormat("{0}\n");
}

Response.Write(sb.ToString());

 // Ozan Vural'a teşekkürler..

Published Thursday, January 04, 2007 11:59 AM by Selçuk Yavuz
Filed under:

Comments

No Comments

Leave a Comment

(required) 
(required) 
(optional)
(required)