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);
C# Dersleri
- C# Programlama Sanatı
- C# Atama İşlemleri
- C# Türlerin Tanımlanması
- C# İle İlk Program
- C# Yaz, Derle, Çalıştır
- C# Ekranda Yazı Yazdırmak
- C# Aritmetik İşlemler
- C# Yorum Cümleleri
- C# Tamsayılar
- C# String Veri Türü
- C# Değer Tip & Referans Tip
- C# Konsoldan Veri Girmek
- C# Sabitler
- C# Decimal Veri Tipi
- C# Kayar Nokta Veri Türleri
- C# Yazı Biçimlendirme
- C# Char ve String Veri Türleri
- C# While Döngüsü
- C# For ve Foreach Döngüleri
- C# İstisna ve Hata Yakalama
- C# Durumsal Operatörler
- C# Nedir?
- C# String Dönüşümleri