for deyimi ve for deyimi kullanılarak oluşturulacak döngü yapısı, işlemlerin tekrar sayısının önceden belli olduğu durumlarda kullanılır.
for deyiminin yazılışı:
for(ifade1;ifade2;ifade3) Deyim;
Deyim_x;
veya
for(ifade1;ifade2;ifade3)
{ Deyim1;
Deyim2;
...
Deyim_n;
}
Deyim_x;
şeklindedir.
- İlk olarak ifade1 hesaplanır; bu genellikle bir ya da daha fazla değişkene ilk değeri veren bir atama deyimidir.
- Sonra ifade2 hesaplanır. Bu, deyimin koşulsal kısmıdır.
- ifade2 yanlışsa, programın kontrolü for deyiminden çıkar ve program akışı programdaki bir sonraki deyime geçer (deyim_x). Eğer ifade2 doğru ise, deyim veya deyimler grubu uygulanır.
- Deyim ya da blok yapılı şekilde deyimler grubu çalıştırıldıktan sonra, ifade3 çalıştırılarak hesaplanır. O zaman çevrim yine geriye, ifade2'ye döner.
İfade1 sadece bir kez çalıştırılır; ifade2 ve ifade3 ise, çevrimin her tekrarında (iteration) çalışıtırılır.
for deyimini anlamanın en iyi yolu, onu aşağıda olduğu gibi while deyimiyle karşılaştırmaktır.
for (ifade1; ifade2; ifade3)
deyim;
yapısı
ifade1;
while (ifade2)
{
deyim;
ifade3;
}
yapısı ile tamamen aynıdır.
Aşağıda basit bir örnek ile for döngü yapısını daha iyi anlamaya çalışalım:
ÖRNEK: for İLE TAM SAYILAR TOPLAMININ BULUNMASI
import java.util.Scanner;
public class PozTop{
public static void main(String args[]) {
Scanner giris = new Scanner(System.in);
int n, toplam;
int i;
System.out.println("Kaca kadar sayilar toplansin? ");
n = giris.nextInt();
toplam = 0;
for (i = 1; i <= n; i++) {
toplam += i;
}
switch (n) {
case 1 :
System.out.println("\n" + n + "=" + toplam);
break;
case 2 :
System.out.println("\n1+" + n + "=" + toplam);
break;
case 3 :
System.out.println("\n1+2+" + n + "=" + toplam);
break;
case 4 :
System.out.println("\n1+2+3+" + n + "=" + toplam);
break;
default :
System.out.println("\n1+2+3+..+" + n + "=" + toplam);
}
}
}
PROGRAMIN ÇIKTISI
Bu programda, for’un başlangıç koşulunu belirleyen ve ifade1 olarak belirttiğimiz ifade i=1 şeklindedir ve bu for döngüsünün parametresi diyebileceğimiz i değişkenine 1 değerini bir ilk değer olarak atamaktadır.
İfade2 ise, i <= n şeklinde bir koşul ifadesidir. i değişkeninin değeri n’den küçük ya da n’ye eşit olduğu sürece döngü sürecektir.
İfade3 ise i = i + 1 şeklinde bir artım ifadesidir ve döngünün her tekrarında i değişkeninin değerini 1 arttıracaktır.
Aşağıdaki tabloda döngü süresince i ve toplam değişkenlerinin değerlerinin nasıl değişeceğine bakalım:
ÇEVRİM ADIMI | i | Toplam |
---|---|---|
Başlangıç, çevrim öncesi | 0 | |
1 | 1 | 1 |
2 | 2 | 3 (1+2) |
3 | 3 | 6 (1+2+3) |
4 | 4 | 10 (1+2+3+4) |
5 | 5 | 15 (1+2+3+4+5) |
Aşağıdaki program parçasında görüldüğü gibi,
for(i=1; i<=n; i=i+1) {
toplam=toplam+i;
}
System.out.println("\n1+2+3+..+"+n+"="+toplam);
System.out.println("\ni="+i);
döngüden çıkınca i’nin değeri yazdırılırsa,
i=6
değeri görünecektir.
ÖRNEK: FAKTÖRİYEL HESABI
for döngüsünü kullanacağımız diğer bir örnek program ise faktöriyel hesabı programı olacaktır. Matematikte faktöriyel bilindiği gibi,
n!=1.2.3...n
şeklinde tanımlanır; yani n sayısının faktöriyeli 1’den n’ye kadar tam sayıların çarpımına eşittir. Aşağıda, faktöriyel hesabıyla ilgili Java programı ve bu program içindeki değişkenlerin programın çalıştırılması sırasındaki değişimlerini gösteren tablo yer alıyor:
KOD BLOĞU:
import java.util.Scanner;
public class Faktoriyel{
public static void main(String args[]){
Scanner giris = new Scanner(System.in);
int n, fakt;
int i;
System.out.println("Kacin faktoriyeli bulunacak? ");
n = giris.nextInt();
fakt = 1;
for (i = 1; i <= n; i++) {
fakt = fakt * i;
}
switch (n) {
case 1 :
System.out.println("\n" + n + "=" + fakt);
break;
case 2 :
System.out.println("\n1*" + n + "=" + fakt);
break;
case 3 :
System.out.println("\n1*2*" + n + "=" + fakt);
break;
case 4 :
System.out.println("\n1*2*3*" + n + "=" + fakt);
break;
default :
System.out.println("\n1*2*3*..*" + n + "=" + fakt);
}
}
}
PROGRAMIN ÇIKTISI:
Faktöriyel Programındaki Değişkenlerin Programın Çalıştırılması Sırasındaki Değişimlerini Gösteren Tablo
i | fakt | n |
---|---|---|
Çevrim Öncesi | 1 | 5 |
1 | 1 | 5 |
2 | 2(1*2) | 5 |
3 | 6(1*2*3) | 5 |
4 | 24(1*2*3*4) | 5 |
5 | 120(1*2*3*4*5) | 5 |
ÖRNEK: ALTERNE SERİ TOPLAMI
1.2/(3.4) - 5.6/(7.8) + 9.10/(11.12) - 13.14/(15.16)
şeklindeki alterne seri toplamını hesaplayalım. (Yukardaki ifadede "." sembolü çarpma işlemi anlamındadır.)
KOD BLOĞU:
public class Alterne {
public static void main(String args[]){
int i,p;
double x,s;
s=0;
p=1;
x=1.0;
for (i=1;i<=4;i++)
{
s=s+(x*(x+1))/((x+2)*(x+3))*p;
x=x+4;
p=-p;
}
System.out.println("Toplam= "+s);
}
}
PROGRAMIN ÇIKTISI:
i | x | s | p |
---|---|---|---|
Çevrim öncesi | 1.0 | 0 | 1 |
1 | 1.0 | (1.2)/ (3.4) | 1 |
2 | 5.0 | (1.2)/ (3.4) – (5.6)/ (7.8) | –1 |
3 | 9.0 | (1.2)/ (3.4) – (5.6)/ (7.8) +(9.10)/ (11.12) | 1 |
4 | 13.0 | (1.2)/ (3.4) – (5.6)/ (7.8) +(9.10)/ (11.12) – (13.14)/(15.16) | –1 |
AÇIKLAMA:
Sadece 4 terim olduğu için for döngüsü 1’den 4’e kadar çalıştırıldı. İlk terim 1.2/ (3.4) ve ikinci terim 5.6/(7.8) olduğu için, x değişkeninin ilk terimdeki ilk sayıyı temsil ettiği durumda, terimi x.(x+1)/((x+2).(x+3)) şeklinde ifade edebiliriz. x yerine 1 koyarak bu durum kolayca kanıtlayabiliriz. İkinci terimde ilk sayı 5, üçüncü terimde ilk sayı 9 olduğuna göre x her seferinde 4 arttırılmalıdır. Bunu da programda x=x+4; deyimiyle gerçekleştiriyoruz. Bu terimi x+=4; şeklinde de yazabiliriz.
Seri alterne seri olduğuna göre, yani terimlerin işaretleri +,–,+,– şeklinde değiştiğine göre, p değişkeni yardımıyla terimlerin işaretlerini ayarlayabiliriz. p önce 1 olarak atanır. Sonra döngü içine konulan p=–p; ifadesi ise bir sonraki işareti –, bir sonrakini + ve onu izleyeni – yapar. (Programı kâğıt üzerinde adım adım izleyelim).