int[] loto = new int[6];
Random rnd = new Random();
for (int i = 0; i < 6; i++)
{
loto[i] = rnd.Next(1, 50);
}
for (int i = 0; i < 6; i++)
{
Console.WriteLine(loto[i]);
}
Evet sayısal lotoyu yaptınız. Ama mantık hatasıyla yaptınız.
Buradaki kodlarda program aynı sayıyı 6 kere seçebilir. Nasıl yani. Şöyle ki for içine girelim çalıştıralım. loto[0]=rnd.Next(1,50); Lotonun 0. elemanına 1 ile 49 arasında rastgele bir sayı at. Bu mesela 20 olsun. for içinde bir daha döndü ve loto[1] e rastgele bi değer daha atayacak, bu değer yine 20 olabilir. Çünkü bunun için bir şart sunmadık. Böylelikle bütün dizi 20 sayısını alabilir.
Peki nasıl olacak. Önceden tutulan değerleri kontrol ettirerek mümkün ya da tüm sayıları bir diziye alıp oradan seçtikten sonra kaldırabiliriz ya da başka alternatifleri düşünülebilir.
İlk dediğime göre yapacak olursak:
//dizi oluşturuluyor.
int[] loto = new int[6];
//random metodu oluşturuluyor.
Random rnd = new Random();
//rastgele sayıların aktarılması için for döngüsü kullanılıyor.
for (int i = 0; i < 6; i++)
{
//Rastgele sayı aktarılıyor.
loto[i] = rnd.Next(1, 50);
//bütün sayıları karşılaştırmak için for açılıyor.
for (int j = 0; j < i; j++)
{
//koşulla sayının eşit olup olmadığı denetleniyor.
if (loto[i] == loto[j])
{
i--;
break;
}
}
}
//ekrana yazdırılıyor.
for (int i = 0; i < 6; i++)
{
Console.WriteLine(loto[i]);
}
İlk kodlamamıza eklediğimiz sadece for ve if komutu ekledik.
for komutunu eklememizin sebebi o ana kadar atanmış sayıları kontrol etmek içindir. Yani atanan sayıyı önceki sayılarla karşılaştırma yapmak için kullandık. if komutunda şart sunduk “loto[i] == loto[j]” Bu şartta “eğer o an seçilen sayı loto[j] değerindeki sayıya eşitse” denmektedir. Eğer eşitse bu döngüyü tekrarlat (i–; break;) dedik.
Kodlamanın doğru çalıştığını görmek istiyorsanız “loto[i] = rnd.Next(1, 50);” kodundaki ’50′ değeri yerine 7 yazabilirsiniz. Bu durumda “1,2,3,4,5,6″ sayılarını seçtiğini göreceksiniz.
Hiç yorum yok:
Yorum Gönder
Yorum Yaz...