C# Programming

C#’da Rastgele Tam Sayılar Üretme

Spread the love

Programlamada rastgele sayı üretmek yaygın bir görevdir ve C# bunu gerçekleştirmek için sağlam araçlar sunar. Bu makale, System.Random sınıfını, işlevlerini ve rastgele tam sayılar üretmek için en iyi uygulamaları ele almaktadır.

İçindekiler

Random Sınıfını Anlamak

C# içindeki System.Random sınıfı, yarı-rastgele sayılar üretmek için kullanılır. Bu sayıların gerçekten rastgele olmadığını hatırlamak çok önemlidir; deterministik bir algoritma kullanılarak üretilirler. Bu, aynı başlangıç durumuyla (seed) verildiğinde, sayı dizisinin aynı olacağı anlamına gelir. Bununla birlikte, birçok uygulama için System.Random tarafından sağlanan yarı-rastgelelik yeterlidir.

Rastgele Tam Sayılar Üretmek

Rastgele tam sayılar üretmek için birincil yöntem Next()‘tir. Bu yöntem birkaç aşırı yükleme sunar:

  • Next(): int.MaxValue‘den küçük negatif olmayan bir rastgele tam sayı döndürür.
  • Next(maxValue): Belirtilen maxValue‘den (maxValue pozitif olmalıdır) küçük negatif olmayan bir rastgele tam sayı döndürür.
  • Next(minValue, maxValue): [minValue, maxValue) kapsayıcı aralığında bir rastgele tam sayı döndürür (maxValue, minValue‘dan büyük olmalıdır).

using System;

public class RandomIntExample
{
    public static void Main(string[] args)
    {
        Random random = new Random();

        int randomNumber1 = random.Next();          // 0 ile int.MaxValue - 1 arasında
        Console.WriteLine($"Rastgele sayı 1: {randomNumber1}");

        int randomNumber2 = random.Next(10);       // 0 ile 9 arasında
        Console.WriteLine($"Rastgele sayı 2: {randomNumber2}");

        int randomNumber3 = random.Next(10, 21);   // 10 ile 20 arasında
        Console.WriteLine($"Rastgele sayı 3: {randomNumber3}");
    }
}

Rastgele Sayı Üreticisini Başlatmak (Seed)

Seed değeri, Random sınıfının iç durumunu başlatır. Aynı seed’i kullanmak her zaman aynı sayı dizisini üretecektir. Seed sağlanmazsa, sistem saati kullanılır ve bu da uygulamanın her çalıştırıldığında farklı bir diziye neden olur. Bu, çoğu uygulama için genellikle tercih edilir.


using System;

public class SeededRandomExample
{
    public static void Main(string[] args)
    {
        Random random1 = new Random(12345);
        int number1 = random1.Next(1, 101);
        Console.WriteLine($"12345 seed'iyle rastgele sayı: {number1}");

        Random random2 = new Random(12345);
        int number2 = random2.Next(1, 101); // number1 ile aynı
        Console.WriteLine($"12345 seed'iyle rastgele sayı: {number2}");

        Random random3 = new Random(); // Sistem zamanını kullanır
        int number3 = random3.Next(1, 101); // Farklı sayı
        Console.WriteLine($"Sistem zamanı seed'iyle rastgele sayı: {number3}");
    }
}

Seed ayarlamak, test ve tekrarlanabilir sonuçlar gerektiren senaryolar için yararlıdır.

Kriptografik Olarak Güvenli Rastgele Sayılar

Kriptografik olarak güvenli rastgele sayılar gerektiren uygulamalar için (örneğin, güvenlik açısından hassas uygulamalar), System.Random yeterli değildir. Bunun yerine, System.Security.Cryptography ad alanını, özellikle RNGCryptoServiceProvider sınıfını kullanın.

Sonuç

System.Random sınıfı, C# içinde yarı-rastgele tam sayılar üretmek için basit ve verimli bir yol sunar. Seed’in rolünü ve farklı Next() aşırı yüklemelerini anlamak, esnek ve kontrollü rastgele sayı üretimine olanak tanır. Güvenlik açısından hassas uygulamalar için her zaman kriptografik olarak güvenli rastgele sayı üreteçlerini seçin.

SSS

  • S: Sayılar gerçekten rastgele mi? C: Hayır, yarı-rastgeledirler.
  • S: Belirli bir aralıkta rastgele sayılar nasıl üretilir? C: Next(minValue, maxValue) kullanın.
  • S: Seed neden ayarlanır? C: Tekrarlanabilir sonuçlar için.
  • S: Kriptografik olarak güvenli rastgele sayılar ne durumda? C: RNGCryptoServiceProvider kullanın.
  • S: Diğer veri tipleri? C: Random sınıfı diğer tipler (ondalıklı sayılar vb.) üretmek için yöntemler sağlar veya tam sayı sonuçları üzerinde dönüşümler yapabilirsiniz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir