Tekrar Etmeyen Rastgele Sayılar

Bilindiği gibi bilgisayarda üretilen sayılar yalancı rastgele sayılardır ve tekrar edebilirler. Daha önceki örneklerde klasik yöntemleri anlatmıştık, şimdi kendi geliştirdiğimiz yöntemle rastgele üretilen bir sayıdan bir daha üretilmemesini sağlayacağız.

Öncelikle Form üzerinde bir Button nesnesi ve bir tane Listbox nesnesi oluşturuyoruz. Ardından button'un üzerine çift tıklayarak Click olayına aşağıdaki kodlarımızı yazıyoruz.


Random motorunu hatırlayacağınız gibi aşağıdaki satır ile başlatıyorduk.
Random rastgele = new Random();

 
Spor Loto'da sayılar 1 ila 49 arasında üretileceği için aşağıdaki gibi sınırı 50 yapıyoruz.
 sayi = rastgele.Next(1, 50);

 
Burada her bir sayının ne kadar tekrarli geleceğini bilmediğimiz için sonsuz döngü kruuyoruz. Sonsuz döngü aşağıdaki şekilde kurulmaktadır. İstediğimiz adete ulaşınca break ile döngüyü kesip çıkıyoruz.

for( ;  ; ){

}


 
Sayıyı her ürettiğimizde Listbox içine atıyoruz, daha sonra yeni üretilen sayı Listbox içinde var mı diye baştan sona taratıyoruz. Hatırlayacağınız gibi Listbox içindeki eleman sayısını Listbox1.Items.Count ile öğreniyorduk. Burada bir döngü açıp 0'dan listedeki eleman sayısına kadar gidip kontrolümüzü gerçekleştiriyoruz.
 
 
Döngüye girmeden önce Boolean (Mantıksal) tipteki yok değeri true, eğer döngüde herhangi bir tekrar eden sayıya rastlarsak yok değerini false yapıyoruz. Döngü bittikten sonra yok değeri true kalmışsa listeye ekliyoruz. Böylece tekrarı önlemiş oluyoruz.
 
 
Aşağıda kodların tamamı yer almaktadır.

private void button1_Click(object sender, EventArgs e)
{
            Random rastgele = new Random();
            int sayi, sayac=0;
            listBox1.Items.Clear();
            for (; ; )
            {
                sayi = rastgele.Next(1, 50);
                Boolean yok = true;
                for (int i = 0; i < listBox1.Items.Count ;i++)
                {
                    if (sayi == (int)listBox1.Items[i])
                    {
                        yok = false;
                    }
 
                } //listenin eleman sayısı kadar döner
                if (yok)
                {
                    listBox1.Items.Add(sayi);
                    sayac++;
                    if (sayac == 6)
                        break;
 
                } //if şartı bitimi
                   
        }//sonsuz döngü
 } //button click
    






Yukarıdaki ekran görüntüsünden de görüldüğü rastgele 6 sayı üretilmiş ama tekrar etmemektedir. 

Mutlu kodlamalar,
Oğuzhan TAŞ
Aralık, 2021
 
Bookmark and Share