İki Sayı Arasında Benzersiz Rasgele Sayı Üret - CSharp


Aşağıdaki metod, alt değer, üst değer ve adet bilgileri girildiğinde istenilen aralıkta, istenilen sayıda ve benzersiz rasgele sayılar üretmeye yarıyor.

Kod


List<int> İkiSayiArasindaBenzersizRasgeleSayiUret
    (int sayiAlt, int sayiUst, int sayiAdet = 1)
{
    List<int> liste = new List<int>();
    bool kontrol;

    #region Kontrol Bölümü
    if (sayiAlt == sayiUst)
    {
        MessageBox.Show("Alt ve üst değerler birbirine eşit.");
        kontrol = false;
    }
    else if (sayiAlt > sayiUst)
    {
        MessageBox.Show("Üst değer, alt değerden küçük olamaz.");
        kontrol = false;
    }
    else if (sayiAdet == 0)
    {
        MessageBox.Show("Sayı adedi sıfır olarak girilmiş.");
        kontrol = false;
    }
    else if (sayiAdet > (sayiUst - sayiAlt) + 1)
    {
        MessageBox.Show(
            sayiAlt.ToString() + " - " + sayiUst.ToString() + " " +
            "Aralığında Üretilebilen En Fazla Sayı Adedi: " +
            ((sayiUst - sayiAlt) + 1).ToString() + "\n\n" +
            "Girilen Adet Bilgisi: " + sayiAdet.ToString());
        kontrol = false;
    }
    else
    {
        kontrol = true;
    }
    #endregion


    #region Üretim Bölümü
    if (kontrol == true)
    {
        while (liste.Count + 1 <= sayiAdet)
        {
            Random rasgeleSayi = new Random();
            int uretilenRasgeleSayi = rasgeleSayi.Next(sayiAlt, sayiUst + 1);

            if (!liste.Contains(uretilenRasgeleSayi))
            {
                liste.Add(uretilenRasgeleSayi);
            }
        }
    }
    #endregion

    return liste;
}

Kod (Açıklamalı)


//--------------------------------------------------
//İkiSayiArasindaBenzersizRasgeleSayiUret
//Metodumuz üç parametre alıyor ve bize
//List<int> tipinden bir değer döndürüyor.
//
//Metod temel olarak iki bölümden oluşuyor.
//Kontrol bölümü ve üretim bölümü.
//Eğer kontrol bölümünden bir sıkıntı çıkmazsa
//üretim bölümü çalışabilir hale geliyor ve
//rasgele sayı üretimi gerçekleştiriliyor.
//--------------------------------------------------
List<int> İkiSayiArasindaBenzersizRasgeleSayiUret
    (int sayiAlt, int sayiUst, int sayiAdet = 1)
{

    //--------------------------------------------------
    //Rasgele sayıları List generic sınıfı üzerinden
    //oluşturduğumuz bir örnekte saklayacağız.
    //Rasgele sayılar da int tipinde olduğundan 
    //dolayı List generic sınıfının parametresini de 
    //int olarak girdik.
    //--------------------------------------------------
    List<int> liste = new List<int>();


    //--------------------------------------------------
    //kontrol isminde ve bool tipinde bir değişken
    //tanımladık. Bu değişkeni metodun parametrelerini
    //kontrol etmek için kullanacağız. Metod sadece
    //bu kontrol değişkeni true değerini aldığı zaman
    //çalışacak.
    //--------------------------------------------------
    bool kontrol = false;


    //--------------------------------------------------
    //Metodun ilk bölümü.
    //Burada çeşitli kontroller yapılıyor ve
    //eğer kontroller esnasında bir sıkıntı çıkmazsa
    //yukarıda tanımlanmış olan kontrol isimli bool
    //değişken true değerini alıyor.
    //--------------------------------------------------
    #region Kontrol Bölümü

    //--------------------------------------------------
    //Eğer kullanıcı iki parametreyi de eşit girmişse
    //(sayiAdet parametresi de varsayılan olarak 1'e eşit)
    //bu durumda üretilecek olan sayı bellidir.
    //Bu da gereksiz bir durum.
    //--------------------------------------------------
    if (sayiAlt == sayiUst)
    {
        MessageBox.Show("Alt ve üst değerler birbirine eşit.");
        kontrol = false;
    }

    //--------------------------------------------------
    //Eğer alt değer üst değerden büyük girilmişse
    //rasgele sayı üretmek için kullanacağımız ve
    //ön tanımlı Next metodu hatalı çalışacak.
    //Bu durumun olmasını istemiyoruz.
    //
    //Gerçi bunun da kontrolü yapılıp ona göre 
    //düzeltilebilir ama parametreleri doğru
    //girmenin daha iyi olacağını düşünüyorum.
    //--------------------------------------------------
    else if (sayiAlt > sayiUst)
    {
        MessageBox.Show("Üst değer, alt değerden küçük olamaz.");
        kontrol = false;
    }

    //--------------------------------------------------
    //Eğer iki sayı aralığında hiç sayı üretilmeyecekse
    //(başka bir deyişle 0 (yazıyla sıfır) adet sayı
    //üretilecekse) bu metoda ne gerek var.
    //--------------------------------------------------
    else if (sayiAdet == 0)
    {
        MessageBox.Show("Sayı adedi sıfır olarak girilmiş.");
        kontrol = false;
    }

    //--------------------------------------------------
    //İki sayı arasında kaç adet sayı olduğunu
    //terim sayısı formülüyle bulabiliriz:
    //((son terim - ilk terim)/artış miktarı) + 1
    //
    //Şimdi bizim artış miktarı zaten 1, bu yüzden
    //aşağıdaki hesaplamaya bunu dahil etmedim.
    //
    //Peki bu terim sayısı formülü ne işimize yarayacak?
    //Eğer üretilmesi istenen sayı adedi, alt ve üst
    //değer aralığındaki sayılardan fazlaysa bunu 
    //kullanıcıya bildirecek. (Hem de hiç utanmadan!)
    //
    //Örneğin 5 ve 10 arasında en fazla 6 adet sayı
    //üretilebilirken (5, 6, 7, 8, 9, 10) adet 
    //parametresine 100 girildiğinde bu miktarı
    //üretmek mümkün olmayacak.
    //--------------------------------------------------
    else if (sayiAdet > (sayiUst - sayiAlt) + 1)
    {
        MessageBox.Show(
            sayiAlt.ToString() + " - " + sayiUst.ToString() + " " +
            "Aralığında Üretilebilen En Fazla Sayı Adedi: " +
            ((sayiUst - sayiAlt) + 1).ToString() + "\n\n" +
            "Girilen Adet Bilgisi: " + sayiAdet.ToString());
        kontrol = false;
    }
    else
    {
        //--------------------------------------------------
        //Eğer yukarıdaki kontrol işlemleri sonucunda bir
        //sıkıntı çıkmamışsa kod çalışmaya devam edebilir
        //demektir. O halde kontrol bool değişkenimizi
        //true yaparak kodun ikinci bölümünü, yani 
        //üretim bölümünü, çalışabilir hale getirelim.
        //--------------------------------------------------
        kontrol = true;
    }
    #endregion


    //--------------------------------------------------
    //Benzersiz rasgele sayıların üretildiği bölüm.
    //--------------------------------------------------
    #region Üretim Bölümü

    //--------------------------------------------------
    //Eğer kontrol bool değişkeni true 
    //değerindeyse çalışmaya devam etsin.
    //--------------------------------------------------
    if (kontrol == true)
    {

        //--------------------------------------------------
        //İstenilen sayıda rasgele sayı üretilene
        //kadar aynı işlemleri yapmaya devam et.
        //--------------------------------------------------
        while (liste.Count + 1 <= sayiAdet)
        {

            //--------------------------------------------------
            //Random sınıfından yardım alarak verilen sayı 
            //aralıklarında yeni bir rasgele sayı üretiyoruz.
            //--------------------------------------------------
            Random rasgeleSayi = new Random();
            int uretilenRasgeleSayi = rasgeleSayi.Next(sayiAlt, sayiUst + 1);

            //--------------------------------------------------
            //Eğer üretilen yeni rasgele sayı liste 
            //(List<int> tipinde) değişkenimizde mevcut
            //değilse bu yeni rasgele sayı liste değişkenine
            //eklensin.
            //--------------------------------------------------
            if (!liste.Contains(uretilenRasgeleSayi))
            {
                liste.Add(uretilenRasgeleSayi);
            }
        }
    }
    #endregion

    //--------------------------------------------------
    //Yukarıdaki işlemler tamamlandığında bize 
    //List<int> tipinde bir rasgele sayılar 
    //listesi döndürecek.
    //--------------------------------------------------
    return liste;
}

Etiketler
csharp açıklamalı içerik csharp rasgele sayı işlemleri csharp sayı işlemleri csharp veri üretme işlemleri