For Next Döngüsü
Döngüler Bir programın olmazsa olmaz yapılarındandır ve özellikle mantıksal ve sürekli işlem yapmada bize kolaylıklar sağlar.
For döngüsü bir işlemin belirli sayıda yapılması için kullanılır.
Dim sayac As Byte
For sayac = 0 To 10
MsgBox("Merhaba")
Next
Değişken tanımlamaları, For döngüsünün içinde de yapılabilir. Bu durumda, değişkenin kapsam alanı bu döngüyle sınırlı kalır.
For sayac As Byte = 0 To 10
MsgBox("Merhaba")
Next
Bu döngünün avantajı, sayacın tekrar sayısı ile kontrolünü ve artırılmasını kendisi yapmasıdır. Next ifadesi sayac değişkenini varsayılan durumda bir artırır.
For döngüsü içinde kullanılan sayac değişkeni sayısal bir değer olmalıdır.
Döngülerde kullanılan sayaçlar, sadece belli bir sayıda işlem yapmayı sağlamaz.
Sayaçların artma veya azalma adımları belirli olduğu için, kod içinde çoğu zaman bu avantajdan yararlanılır.
ListBox1.Items.Add("Karakter - ASCII kod karşılığı")
Dim i As Byte
For i = 0 To 255
ListBox1.Items.Add(Chr(i) & " - " & i)
Next
Örneğin dizi işlemlerinde, dizinin her elamanına ulaşmak için sayaç kullanılabilir.
Sayacın artma hızı bir olduğu için dizi(sayac) ifadesi, sırayla dizinin elemanlarına ulaşmayı sağlar.
Dim i As Integer
Dim dizi(10) As Integer
For i = 0 To dizi.Length - 1
dizi(i) = Rnd() * 1000
Next
Not: Döngüler içinde dizi kullanılırken, sayaç sıfırdan başlamışsa döngünün biteceği nokta “dizi uzunluğu -1” olmalıdır.
Not: Değişken tanımlamaları For döngüsünün içinde de yapılabilir. Bu durumda, değişkenin kapsam alanı bu döngüyle sınırlı kalır.
Döngülerde sayaç değişkeninin artma veya azalma adımları Step ifadesi ile belirlenir.
Dim fahr, derece As Integer
For derece = 0 To 500 Step 20
fahr = derece * 1.8 + 32
Label1.Text &= fahr & " Fahrenheit= "
Label1.Text &= derece & " Celcius" & vbCrLf
Next
For Döngülerinin İç İçe Kullanımı
Çoğu zaman For döngülerindeki her etap için başka bir döngünün kurulması gerekir. Örneğin, bir müşterinin birden fazla telefon numarası bir dizi içinde tutuluyorsa, bütün müşterilerin telefonlarını listelemek için iki döngü kullanılması gerekir. İlk döngü tek tek müşterileri almak için, alt döngü ise her müşterinin telefonlarını almak için kullanılmalıdır.
Structure Musteri
Dim Isim As String
Dim Soyad As String
Dim Telefonlari() As String
End Structure
Dim Musteriler() As Musteri ' Musteriler dizisi dolduruluyor
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
Dim i, j As Integer
For i = 0 To Musteriler.Length – 1 ' İlk müşteri seçiliyor
Dim m As Musteri = Musteriler(i)
Label1.Text &= m.Isim & " " & m.Soyad
Label1.Text &= " müşterisinin telefonları:" & vbCrLf
For j = 0 To m.Telefonlari.Length - 1
Label1.Text &= m.Telefonlari(j)
Label1.Text &= vbCrLf
Next
Next
End Sub
Birden fazla boyutlu dizilerde işlem yaparken de For döngüsü iç içe kullanılabilir.
Örneğin, iki boyutlu bir tabloda, ilk boyut için bir For döngüsü, diğer boyut için de başka bir For döngüsü kullanılarak dizinin tüm elemanlarına ulaşılabilir.
Randomize()
Dim tablo(4, 4) As String
Dim i As Byte
For i = 1 To 4
tablo(0, i) = "Yazar " & i
tablo(i, 0) = "Kitap " & i
tablo(CInt(Rnd() * 3) + 1, CInt(Rnd() * 3) + 1) = "X"
Next
Tablo isminde String değerleri tutan bir dizi oluşturulur ve dizinin ilk satırına yazar isimleri, ilk sütununa da kitap isimleri konur. For döngüsünün sayacı birden başladığı için dizinin 0,0 koordinatlı ilk elemanına değer atanmaz.
Yazar 1 Yazar 2 Yazar 3 Yazar 4
Makale 1
Makale 2
Makale 3
Makale 4
Daha sonra, tablonun diğer elemanlarına rasgele X değerleri atanır. Bu değer hangi yazarın hangi kitabı yazdığını gösterir.
CInt(Rnd() * 3) + 1 ifadesi 1 ile 4 arasında rasgele bir sayı üretir. Bu sayı tablo dizisine indis olarak verildiğinde, kalan hücrelerde X değeri elde edilir.
Tablonun tüm elemanlarını listelemek için iç içe iki For döngüsü kullanılmalıdır.
For j As Integer = 0 To tablo.GetLength(0) - 1
For h As Integer = 0 To tablo.GetLength(1) - 1
Label1.Text &= tablo(j, h)
Next
Label1.Text &= vbCrLf
Next
Yazarlar ve Makaleler tablosu hazırlandıktan sonra, hangi yazarın hangi Makaleyi yazdığını bulmak için yine tablo elemanları içinde dolaşıp X değerini aramak gerekir. İlk For döngüsü ile Makaleler satırlarında, ikinci For döngüsü ile Yazarlar sütunlarında gezilir.
For j As Integer = 0 To tablo.GetLength(0) - 1
For h As Integer = 0 To tablo.GetLength(1) – 1' Tablonun her elemanının değeri X değeri ile karşılaştırılır.
If tablo(j, h) = "X" Then
Label2.Text = tablo(0, h) & ", "
Label2.Text &= tablo(j, 0)
Label2.Text &= " Makalesini yazıyor"
Exit For
End If
Next
Label1.Text &= vbCrLf
Next
Tablonun her elemanı kontrol edilir ve X değeri bulunduğu zaman, yazar ismi ve Makale ismi ekrana yazdırılır. Yazar isimlerine, dizinin ikinci boyutunun ilk sırasında tutulduğu için tablo(0,h) kodu ile ulaşılır. Kitap isimlerine ise, dizinin ilk boyutunun ilk sırasında tutulduğu için tablo(j,0) kodu ile ulaşılır. Buradaki h ve j değişkenleri o anda kontrol edilen elemanın tablodaki indisleridir.
Exit For ifadesi, o anda bulunan For döngüsünden çıkmayı sağlar. Bu örnekte ikinci For döngüsü Yazarlar sütunu üzerinde döndüğü için, bu döngüden çıkıldığında, ilk For döngüsüne tekrar geçilir. Bu sefer yeni bir Makale için Yazarlar kontrol edilir. Sonuçta bir kitabı birden fazla yazar yazmasına rağmen, Görüntülenecek olan sadece ilk yazardır.