C# For ve Foreach Döngüleri


For ve Foreach
Döngüleri




for ve foreach
döngülerinin kullanımını sırasıyla inceleyelim.






for (i = 0; i < hedef; i++)
{
// i değişkeni ile yapılacak işlemler
}



i döngü değişkenine
genellikle başlangıçta 0 atanır. Dolayısıyla bir dizinin
indekslenmesi ile ilgili işlemlerde kolaylık sağlar.



Çoğu programcı while-do
döngüsü kullanmaktansa for dögüsü kullanmayı tercih eder. Hatta
bazı yerlerde while-do döngüsünü kullanmak daha uygun olduğu
halde for döngüsü kullanırlar.



For döngüsünün de
while döngüsünde olduğu gibi karmaşık kullanım şekilleri
mevcuttur. Örneğin break ve exit cümlecikleri while döngüsündeki
görevinin aynısını for döngüsünde de üstlenmektedir.



For kelimesinden
sonra parantez açılmaldır. Parantez içerisine noktalı virgüller
ile ayrılmış üç ifade yazılır. Bu ifadeler sırasıyla başlangıç
değeri, koşul ve değişim değeridir.



Parantez içindeki üç
ifadeden ilki ile döngünün başlangıç değerini belirtiriz.
Genellikle tek bir değişken kullanılır, fakat isterseniz
aşağıdaki gibi birden fazla değişken için başlangıç değeri
atayabilirsiniz.






 for (i = 0, j = 17; …… ; ….) 



Parantez içindeki
ikinci ifade ile koşul durumunu belirtiriz. Bu bölüm boolean
türünde kontrol edilir. Şart sağlanmış ise false değeri dönecek
ve döngüden çıkılmış olacaktır. Eğer koşul henüz gerçekleşmemiş
ise true değerini alır ve döngü işlemeye devam eder.






for (i = 0; false; i++)
{
// işleme alınmayacaktır.
}



Parantez içindeki
üçüncü ifade ile değişim miktarını belirtiriz. Başlangıç
değerinde olduğu gibi birden fazla değişkenin değişimi
eklenebilir.






for (i = 0, j = 100; i < j; i++, j -= 5)
{
// i ve j değişkenleri kullanılabilir
}



Bu üç ifade
belirtilirken kullandığımız değişkenlerin başlangıç değerlerini
daha önceden atayabiliriz. Aşağıdaki örnek bir önceki ile aynı
sonucu verecektir.






j = 100;

for (i = 0; i < j; i++)
{
// i ve j değişkenleri kullanılabilir

j -= 5;
}



İsterseniz bu üç
ifade yerini boş bırakıp sadece noktalı virgülleri parantezle
içerisinde bırakabilirsiniz.






for (;;)
{
// herhangi bir işlem..
}



Bu şekilde sonsuz
döngü oluşturabilirsiniz. While döngüsü ile ise sonsuz döngü
aşağıdaki şekilde olacaktır.






while (true)
{
// Herhangi bir işlem.
}



Başlangıç değerini
belirtirken kullandığımız i değişkeni program içerisinde daha
önceden tanımlamadıysanız döngü içerisinde aşağıdaki şekilde
belirtmelisiniz.






for (i = 0; i < hedef; i++)
{
// i değişkeni ile yapılan işlemler
}



Örneğin string bir
dizi olan sdizi için döngü aşağıdaki şekilde olacaktır.






for (int i = 0; i < sdizi.Length; i++)
{
Console.WriteLine(sdizi[i]);
}



Bu döngüde tek bir
ifade olduğundan süslü parantezleri kullanmayabilirsiniz.



Yukarıdaki örneklerde
i değişkeninin değeri, eğer döngü herhangi bir sebeple yarıda
sonlandırılmadıysa, döngü sonucunda hedef değerine eşit olur.



Eğer C veya C++
dillerini kullanan deneyimli bir programcıya 1 den 100 ’e kadar
olan sayıları C# kodu ile ekrana yazdırmasını isterseniz,
aşağıdaki şekilde bir sonuç alırsınız:






for (int i = 0; i < 100; i++)
Console.WriteLine(i + 1);




Bu program bloğunda i
değişkeni 0 dan 99 ‘a kadar değerleri alıyor. Fakat ekran
çıktımızda 1 den 100 ‘e kadar olan sayıları görüntülüyoruz.
Üstad programcılar genellikle bu yöntemi kullanırlar. Daha
akıllıca bir yazım şekli de şöyledir:






for (int i = 0; i < 100; Console.WriteLine(++i));
Şimdi de herbirinde 20 karakter olan 3 kolon halinde bir dizinin elemanlarını gösterelim.
for (int i = 0; i < sdizi.Length; i++)
if (i % 3 == 2)
Console.WriteLine("{0,-20}", sdizi[i]);
else
Console.Write("{0,-20}", sdizi[i]);



Döngü içersinde tek
bir ifade olduğundan süslü parantezleri kullanmadık. If
cümleciği, ilk değerin 3 ‘e bölümünden elde edilen kalanın 2 ye
eşit olup olmadığını kontrol ediyor. İ değeri yalnız 2,5,8,11
olduğunda bir sonraki satıra geçiyor ve kolonlarımız oluşuyor.



Genellikle bir
dizinin elemanlarını karşılaştırmak için for döngüsü kullanırız.
Örneğin 30 kişilik yakın arkadaşlarımızın isimlerinden oluşan
bir dizimiz var. Kaç arkadaşımızın isminde E harfi yer aldığını
hesaplamak istiyoruz:






char[] harfara = {'e', 'E'};
int eharfliler = 0;

for (int i = 0; i < isimler.Length; i++)
if (isimler[i].IndexOfAny(harfara) != -1)
eharfliler++;



Buradaki harfara
dizisi char tipinde olup “E” ve “e” karakterlerini içermektedir.
If bloğunda String sınıfının bir metodu olan IndexOfAny ile
harfara dizisindeki elemanlar karşılaştırılıyor. Eğer isimde
herhangi bir e karakteri yer almıyor ise IndexOfAny metodu -1
değerini döndürecektir. Eğer -1 değeri dönmez ise eharfliler
değişkeni 1 arttırılıyor.



Eğer bu isimleri
başka bir diziye kopyalamak isterseniz :






using System;

class harfarama
{
static void Main()
{
string[] isimler =
{
"Ömer Faruk Demir","Ali Can","Elima Aydın", "Sefa Filiz", "Ebru Sevim"

};
int eharfiler = 0;
char[] harfara = {'z', 'Z'};

// Öncelikle “e” veya “E” harfi olanların sayısını buluyoruz

for (int i = 0; i < isimler.Length; i++)
if (isimler[i].IndexOfAny(harfara) != -1)
eharfliler++;

// yeni bir string dizi oluşturuyoruz

string[] eisimler = new string[eharfliler];

// Bir diziden diğer diziye kopyalama işlemini yapıyoruz

for (int i = 0, j = 0; i < isimler.Length; i++)
if (isimler[i].IndexOfAny(harfara) != -1)
eisimler[j++] = isimler[i];



// Yeni oluşan dizimizi ekrana yazdırıyoruz

for (int i = 0; i < eisimler.Length; i++)
Console.WriteLine(eisimler[i]);
}
}



Bu programda üç adet
for döngüsü yer alıyor. İlk döngü yukarı da incelediğimizin
aynısı, isimleri sayıyor. Program isminde E harfi olanların yer
aldığı dizinin uzunluğunu hesaplıyor. İkinci döngü ile kopyalama
işlemi gerçekleştiriliyor. Son döngü ile de yeni oluşan dizimiz
ekrana yazdırmak için kullanılıyor.



Bir dizinin tüm
elemanlarına erişmek için foreach döngüsü daha pratik olacaktır.
Decimal tipte bir dizinin tüm elemanlarını foreach döngüsü
kullanarak toplayalım:






decimal mtoplam = 0;

foreach (decimal m in mdizi)
{
mtoplam += m
}



foreach cümleciğinden
sonra parantezler içerisine erişeceğimiz dizinin tipinde bir
değişken tanımlıyoruz.Daha sonra dizimizin adını yazarak son
elemana kadar döngünün sürdürülmesini sağlıyoruz. foreach
döngüsünün bazı sınırlılıkları vardır. Örneğin döngü içerisinde
dizinin herhangi bir elemanına ulaşamazsınız. foreach döngüsü
yalnız döngülerde kullanılmaz. Örneğin string bir değişkenin
elemanlarını (karakterlerini) ekrana yazdıralım:






foreach (char karakter in str)
Console.WriteLine(karakter);


Hanci.org sizlere daha iyi hizmet sunmak için çerezleri kullanıyor.
Hanci.org sitesini kullanarak çerez politikamızı kabul etmiş olacaksınız.
Detaylı bilgi almak için Gizlilik ve Çerez Politikası metnimizi inceleyebilirsiniz.