Döngüler

Bilgisayar ve Programlamaya Giriş
forwhiledo-whileİç içeÖrnekler
Sercan KÜLCÜ · Giresun Üniversitesi

Giriş

Öğrenme Çıktıları

Döngü

for, while ve do-while yapılarını seçmek.

Kalıplar

Sayaç ve biriktirici ile hesap yapmak.

İç içe

İç içe döngülerle satır-sütun desenleri üretmek.

İzleme

Döngüyü sınır değerlerle adım adım doğrulamak.

Döngüler

Döngünün Bileşenleri

  • Başlangıç: döngüden önce bir kez kurulan durum.
  • Koşul: her turdan önce (do-while’da sonra) sorulur; false ise çıkılır.
  • Gövde: her turda yapılan iş.
  • Güncelleme: koşulu sona yaklaştırır; unutulursa döngü bitmez.
Bu dört renk bölüm boyunca aynı anlamda kullanılır.
başlangıçsayaç = 1sayaç <= n ?koşulgövdeişi yapgüncellemesayaç++truetekrarfalsesonraki komut

Döngüler

for Döngüsü

int n = 4;
int toplam = 0;
for (int i = 1; i <= n; i++) {
    toplam += i;
}
System.out.println(toplam);

başlangıçkoşulgövdegüncelleme

  • Tekrar sayısı belli olduğunda for uygundur; dört parça tek satırda toplanır.
  • Sıra: başlangıç → koşul → gövde → güncelleme → koşul …
  • i yalnızca döngü içinde tanımlıdır.
başlangıçint i = 1i <= nkoşulgövdetoplam += igüncellemei++truetekrarfalseprintln(toplam)

Döngüler · Kodu adım adım çalıştır

Kod İzleme: for ile 1 + 2 + 3 + 4

int i = 1başlangıçi <= nkoşultoplam += igövdei++güncellemetruetekrar (koşula dön)falseprintln(toplam)döngüden sonran4toplamNone

n = 4: 1’den 4’e kadar toplayacağız.

int i = 1başlangıçi <= nkoşultoplam += igövdei++güncellemetruetekrar (koşula dön)falseprintln(toplam)döngüden sonran4toplam0

Biriktirici toplam = 0 ile başlar (henüz hiçbir sayı eklenmedi).

int i = 1başlangıçi <= nkoşultoplam += igövdei++güncellemetruetekrar (koşula dön)falseprintln(toplam)döngüden sonran4toplam0i1

Başlangıç: int i = 1 yalnızca bir kez çalışır.

int i = 1başlangıçi <= nkoşultoplam += igövdei++güncellemetruetekrar (koşula dön)falseprintln(toplam)döngüden sonran4toplam0i1

Koşul: i <= n → 1 <= 4 → true → gövdeye gir.

int i = 1başlangıçi <= nkoşultoplam += igövdei++güncellemetruetekrar (koşula dön)falseprintln(toplam)döngüden sonran4toplam1i1

Gövde: toplam = 0 + 1 = 1.

int i = 1başlangıçi <= nkoşultoplam += igövdei++güncellemetruetekrar (koşula dön)falseprintln(toplam)döngüden sonran4toplam1i2

Güncelleme: i++ → i = 2. Sonra yine koşula dönülür.

int i = 1başlangıçi <= nkoşultoplam += igövdei++güncellemetruetekrar (koşula dön)falseprintln(toplam)döngüden sonran4toplam1i2

Koşul: i <= n → 2 <= 4 → true → gövdeye gir.

int i = 1başlangıçi <= nkoşultoplam += igövdei++güncellemetruetekrar (koşula dön)falseprintln(toplam)döngüden sonran4toplam3i2

Gövde: toplam = 1 + 2 = 3.

int i = 1başlangıçi <= nkoşultoplam += igövdei++güncellemetruetekrar (koşula dön)falseprintln(toplam)döngüden sonran4toplam3i3

Güncelleme: i++ → i = 3. Sonra yine koşula dönülür.

int i = 1başlangıçi <= nkoşultoplam += igövdei++güncellemetruetekrar (koşula dön)falseprintln(toplam)döngüden sonran4toplam3i3

Koşul: i <= n → 3 <= 4 → true → gövdeye gir.

int i = 1başlangıçi <= nkoşultoplam += igövdei++güncellemetruetekrar (koşula dön)falseprintln(toplam)döngüden sonran4toplam6i3

Gövde: toplam = 3 + 3 = 6.

int i = 1başlangıçi <= nkoşultoplam += igövdei++güncellemetruetekrar (koşula dön)falseprintln(toplam)döngüden sonran4toplam6i4

Güncelleme: i++ → i = 4. Sonra yine koşula dönülür.

int i = 1başlangıçi <= nkoşultoplam += igövdei++güncellemetruetekrar (koşula dön)falseprintln(toplam)döngüden sonran4toplam6i4

Koşul: i <= n → 4 <= 4 → true → gövdeye gir.

int i = 1başlangıçi <= nkoşultoplam += igövdei++güncellemetruetekrar (koşula dön)falseprintln(toplam)döngüden sonran4toplam10i4

Gövde: toplam = 6 + 4 = 10.

int i = 1başlangıçi <= nkoşultoplam += igövdei++güncellemetruetekrar (koşula dön)falseprintln(toplam)döngüden sonran4toplam10i5

Güncelleme: i++ → i = 5. Sonra yine koşula dönülür.

int i = 1başlangıçi <= nkoşultoplam += igövdei++güncellemetruetekrar (koşula dön)falseprintln(toplam)döngüden sonran4toplam10i5

Koşul: i <= n → 5 <= 4 → false → döngü biter.

int i = 1başlangıçi <= nkoşultoplam += igövdei++güncellemetruetekrar (koşula dön)falseprintln(toplam)döngüden sonran4toplam10

Döngüden sonra println 10 yazar. i artık yok: kapsamı döngüydü. Gövde 4 kez, koşul 5 kez çalıştı.

int n = 4;
int toplam = 0;
for (int i = 1; i <= n; i++) {
    toplam += i;
}
System.out.println(toplam);

Döngüler

while Döngüsü

int sayı = 5;
int faktöriyel = 1;
while (sayı > 1) {
    faktöriyel *= sayı;
    sayı--;
}
System.out.println(faktöriyel);

başlangıçkoşulgövdegüncelleme

  • Koşul gövdeden önce kontrol edilir.
  • Başlangıçta false ise gövde hiç çalışmaz.
  • Başlangıç döngüden önce, güncelleme gövdenin içinde yazılır.
başlangıçsayı = 5faktöriyel = 1sayı > 1koşulgövdefaktöriyel *= sayıgüncellemesayı--truetekrarfalseprintln(faktöriyel)

Döngüler · Kodu adım adım çalıştır

Kod İzleme: while ile 5!

sayı = 5faktöriyel = 1başlangıçsayı > 1koşulfaktöriyel *= sayıgövdesayı--güncellemetruetekrar (koşula dön)falseprintln(faktöriyel)döngüden sonrasayı5

Başlangıç: sayı = 5 (5! hesaplanacak).

sayı = 5faktöriyel = 1başlangıçsayı > 1koşulfaktöriyel *= sayıgövdesayı--güncellemetruetekrar (koşula dön)falseprintln(faktöriyel)döngüden sonrasayı5faktöriyel1

Çarpım biriktiricisi 1 ile başlar (0 olsaydı sonuç hep 0 olurdu).

sayı = 5faktöriyel = 1başlangıçsayı > 1koşulfaktöriyel *= sayıgövdesayı--güncellemetruetekrar (koşula dön)falseprintln(faktöriyel)döngüden sonrasayı5faktöriyel1

Koşul: 5 > 1 → true → gövde çalışır.

sayı = 5faktöriyel = 1başlangıçsayı > 1koşulfaktöriyel *= sayıgövdesayı--güncellemetruetekrar (koşula dön)falseprintln(faktöriyel)döngüden sonrasayı5faktöriyel5

faktöriyel = 1 × 5 = 5.

sayı = 5faktöriyel = 1başlangıçsayı > 1koşulfaktöriyel *= sayıgövdesayı--güncellemetruetekrar (koşula dön)falseprintln(faktöriyel)döngüden sonrasayı4faktöriyel5

Güncelleme: sayı-- → 4. Koşul sona yaklaşır.

sayı = 5faktöriyel = 1başlangıçsayı > 1koşulfaktöriyel *= sayıgövdesayı--güncellemetruetekrar (koşula dön)falseprintln(faktöriyel)döngüden sonrasayı4faktöriyel5

Koşul: 4 > 1 → true → gövde çalışır.

sayı = 5faktöriyel = 1başlangıçsayı > 1koşulfaktöriyel *= sayıgövdesayı--güncellemetruetekrar (koşula dön)falseprintln(faktöriyel)döngüden sonrasayı4faktöriyel20

faktöriyel = 5 × 4 = 20.

sayı = 5faktöriyel = 1başlangıçsayı > 1koşulfaktöriyel *= sayıgövdesayı--güncellemetruetekrar (koşula dön)falseprintln(faktöriyel)döngüden sonrasayı3faktöriyel20

Güncelleme: sayı-- → 3. Koşul sona yaklaşır.

sayı = 5faktöriyel = 1başlangıçsayı > 1koşulfaktöriyel *= sayıgövdesayı--güncellemetruetekrar (koşula dön)falseprintln(faktöriyel)döngüden sonrasayı3faktöriyel20

Koşul: 3 > 1 → true → gövde çalışır.

sayı = 5faktöriyel = 1başlangıçsayı > 1koşulfaktöriyel *= sayıgövdesayı--güncellemetruetekrar (koşula dön)falseprintln(faktöriyel)döngüden sonrasayı3faktöriyel60

faktöriyel = 20 × 3 = 60.

sayı = 5faktöriyel = 1başlangıçsayı > 1koşulfaktöriyel *= sayıgövdesayı--güncellemetruetekrar (koşula dön)falseprintln(faktöriyel)döngüden sonrasayı2faktöriyel60

Güncelleme: sayı-- → 2. Koşul sona yaklaşır.

sayı = 5faktöriyel = 1başlangıçsayı > 1koşulfaktöriyel *= sayıgövdesayı--güncellemetruetekrar (koşula dön)falseprintln(faktöriyel)döngüden sonrasayı2faktöriyel60

Koşul: 2 > 1 → true → gövde çalışır.

sayı = 5faktöriyel = 1başlangıçsayı > 1koşulfaktöriyel *= sayıgövdesayı--güncellemetruetekrar (koşula dön)falseprintln(faktöriyel)döngüden sonrasayı2faktöriyel120

faktöriyel = 60 × 2 = 120.

sayı = 5faktöriyel = 1başlangıçsayı > 1koşulfaktöriyel *= sayıgövdesayı--güncellemetruetekrar (koşula dön)falseprintln(faktöriyel)döngüden sonrasayı1faktöriyel120

Güncelleme: sayı-- → 1. Koşul sona yaklaşır.

sayı = 5faktöriyel = 1başlangıçsayı > 1koşulfaktöriyel *= sayıgövdesayı--güncellemetruetekrar (koşula dön)falseprintln(faktöriyel)döngüden sonrasayı1faktöriyel120

Koşul: 1 > 1 → false → döngüden çıkılır.

sayı = 5faktöriyel = 1başlangıçsayı > 1koşulfaktöriyel *= sayıgövdesayı--güncellemetruetekrar (koşula dön)falseprintln(faktöriyel)döngüden sonrasayı1faktöriyel120

120 yazılır: 5 × 4 × 3 × 2 = 120. Gövde 4 kez çalıştı; 1 ile çarpmaya gerek yok.

int sayı = 5;
int faktöriyel = 1;
while (sayı > 1) {
    faktöriyel *= sayı;
    sayı--;
}
System.out.println(faktöriyel);

Döngüler

do-while Döngüsü

Scanner klavye = new Scanner(System.in);
int seçim;
do {
  System.out.print("Seçim (1/0): ");
  seçim = klavye.nextInt();
  if (seçim == 1)
    System.out.println("Merhaba!");
} while (seçim != 0);
System.out.println("Güle güle");

başlangıçkoşulgövdegüncelleme

  • Koşul gövdeden sonra kontrol edilir → gövde en az bir kez çalışır.
  • Menü ve girdi doğrulama için doğal seçimdir.
  • while (…); sonundaki noktalı virgül unutulmamalı.
başlangıçint seçim;gövdemenüyü yazgüncellemeseçim = nextInt()seçim != 0koşultruefalseprintln("Güle güle")

Döngüler · Kodu adım adım çalıştır

Kod İzleme: do-while menüsü (girdi 1, 2, 0)

int seçim;başlangıçprint("Seçim…")if (seçim == 1) …gövdeseçim = nextInt()güncellemeseçim != 0koşultrue → tekrarfalseprintln("Güle güle")döngüden sonraseçim?klavye1 2 0

Klavyeden okumak için Scanner (dosya başında import java.util.Scanner;). Kullanıcı sırayla 1, 2, 0 yazacak.

int seçim;başlangıçprint("Seçim…")if (seçim == 1) …gövdeseçim = nextInt()güncellemeseçim != 0koşultrue → tekrarfalseprintln("Güle güle")döngüden sonraseçim?klavye1 2 0

seçim bildirildi ama değeri yok; koşul ilk kez gövdeden sonra sorulacağı için sorun olmaz.

int seçim;başlangıçprint("Seçim…")if (seçim == 1) …gövdeseçim = nextInt()güncellemeseçim != 0koşultrue → tekrarfalseprintln("Güle güle")döngüden sonraseçim?klavye1 2 0

1. tur: koşula bakmadan gövdeye girilir, menü yazılır.

int seçim;başlangıçprint("Seçim…")if (seçim == 1) …gövdeseçim = nextInt()güncellemeseçim != 0koşultrue → tekrarfalseprintln("Güle güle")döngüden sonraseçim1klavye2 0

Kullanıcı 1 yazar → seçim = 1.

int seçim;başlangıçprint("Seçim…")if (seçim == 1) …gövdeseçim = nextInt()güncellemeseçim != 0koşultrue → tekrarfalseprintln("Güle güle")döngüden sonraseçim1klavye2 0

seçim == 1 → true: «Merhaba!» yazılır.

int seçim;başlangıçprint("Seçim…")if (seçim == 1) …gövdeseçim = nextInt()güncellemeseçim != 0koşultrue → tekrarfalseprintln("Güle güle")döngüden sonraseçim1klavye2 0

Koşul: 1 != 0 → true → başa dön.

int seçim;başlangıçprint("Seçim…")if (seçim == 1) …gövdeseçim = nextInt()güncellemeseçim != 0koşultrue → tekrarfalseprintln("Güle güle")döngüden sonraseçim1klavye2 0

2. tur: koşula bakmadan gövdeye girilir, menü yazılır.

int seçim;başlangıçprint("Seçim…")if (seçim == 1) …gövdeseçim = nextInt()güncellemeseçim != 0koşultrue → tekrarfalseprintln("Güle güle")döngüden sonraseçim2klavye0

Kullanıcı 2 yazar → seçim = 2.

int seçim;başlangıçprint("Seçim…")if (seçim == 1) …gövdeseçim = nextInt()güncellemeseçim != 0koşultrue → tekrarfalseprintln("Güle güle")döngüden sonraseçim2klavye0

seçim == 1 → false: hiçbir şey yapılmaz.

int seçim;başlangıçprint("Seçim…")if (seçim == 1) …gövdeseçim = nextInt()güncellemeseçim != 0koşultrue → tekrarfalseprintln("Güle güle")döngüden sonraseçim2klavye0

Koşul: 2 != 0 → true → başa dön.

int seçim;başlangıçprint("Seçim…")if (seçim == 1) …gövdeseçim = nextInt()güncellemeseçim != 0koşultrue → tekrarfalseprintln("Güle güle")döngüden sonraseçim2klavye0

3. tur: koşula bakmadan gövdeye girilir, menü yazılır.

int seçim;başlangıçprint("Seçim…")if (seçim == 1) …gövdeseçim = nextInt()güncellemeseçim != 0koşultrue → tekrarfalseprintln("Güle güle")döngüden sonraseçim0klavye—

Kullanıcı 0 yazar → seçim = 0.

int seçim;başlangıçprint("Seçim…")if (seçim == 1) …gövdeseçim = nextInt()güncellemeseçim != 0koşultrue → tekrarfalseprintln("Güle güle")döngüden sonraseçim0klavye—

seçim == 1 → false: hiçbir şey yapılmaz.

int seçim;başlangıçprint("Seçim…")if (seçim == 1) …gövdeseçim = nextInt()güncellemeseçim != 0koşultrue → tekrarfalseprintln("Güle güle")döngüden sonraseçim0klavye—

Koşul: 0 != 0 → false → döngü biter.

int seçim;başlangıçprint("Seçim…")if (seçim == 1) …gövdeseçim = nextInt()güncellemeseçim != 0koşultrue → tekrarfalseprintln("Güle güle")döngüden sonraseçim0klavye—

Gövde 3 kez çalıştı; koşul da 3 kez soruldu (while’da gövde sayısından bir fazla sorulurdu).

Scanner klavye = new Scanner(System.in);
int seçim;
do {
  System.out.print("Seçim (1/0): ");
  seçim = klavye.nextInt();
  if (seçim == 1)
    System.out.println("Merhaba!");
} while (seçim != 0);
System.out.println("Güle güle");

Döngüler

Döngü Seçimi

DurumTercih
1’den n’ye say, n kez tekrarlafor
Sayı 0 olana kadar basamak işlewhile
Menü göster, geçerli girdi gelene kadar sordo-while
Kullanıcı “0” yazana kadar toplawhile / do-while

Üçü de birbirine çevrilebilir; seçim okunabilirlik içindir.

Tekrar sayısıönceden belli mi?evetforhayırEn az bir kezçalışmalı mı?evethayırdo-whilewhile

Dallanma

break ve continue

for (int i = 1; i <= 10; i++) {
    if (i % 3 == 0) continue;
    if (i == 8) break;
    System.out.print(i + " ");
}
System.out.println("| bitti");
  • continue: turun kalanını atlar, güncellemeye (i++) geçer.
  • break: en yakın döngüyü hemen bitirir.
  • Aşırı kullanım akışı izlemeyi zorlaştırır.
i <= 10 ?i % 3 == 0 ?i == 8 ?print(i)i++continuebreakdöngü sonu

Dallanma · Kodu adım adım çalıştır

Kod İzleme: break ve continue

1i2i3i4i5i6i7i8i9i10i

i = 1: 1 % 3 = 1 → false; 1 == 8 → false. İki kontrol de geçildi.

1iyazıldı2i3i4i5i6i7i8i9i10i

1 yazılır.

1iyazıldı2i3i4i5i6i7i8i9i10i

i = 2: 2 % 3 = 2 → false; 2 == 8 → false. İki kontrol de geçildi.

1iyazıldı2iyazıldı3i4i5i6i7i8i9i10i

2 yazılır.

1iyazıldı2iyazıldı3icontinue4i5i6i7i8i9i10i

i = 3: 3 % 3 == 0 → true → continue: print atlanır, doğrudan i++.

1iyazıldı2iyazıldı3icontinue4i5i6i7i8i9i10i

i = 4: 4 % 3 = 1 → false; 4 == 8 → false. İki kontrol de geçildi.

1iyazıldı2iyazıldı3icontinue4iyazıldı5i6i7i8i9i10i

4 yazılır.

1iyazıldı2iyazıldı3icontinue4iyazıldı5i6i7i8i9i10i

i = 5: 5 % 3 = 2 → false; 5 == 8 → false. İki kontrol de geçildi.

1iyazıldı2iyazıldı3icontinue4iyazıldı5iyazıldı6i7i8i9i10i

5 yazılır.

1iyazıldı2iyazıldı3icontinue4iyazıldı5iyazıldı6icontinue7i8i9i10i

i = 6: 6 % 3 == 0 → true → continue: print atlanır, doğrudan i++.

1iyazıldı2iyazıldı3icontinue4iyazıldı5iyazıldı6icontinue7i8i9i10i

i = 7: 7 % 3 = 1 → false; 7 == 8 → false. İki kontrol de geçildi.

1iyazıldı2iyazıldı3icontinue4iyazıldı5iyazıldı6icontinue7iyazıldı8i9i10i

7 yazılır.

1iyazıldı2iyazıldı3icontinue4iyazıldı5iyazıldı6icontinue7iyazıldı8ibreak9i10i

i = 8: 8 % 3 = 2 → false; 8 == 8 → true → break: döngü burada biter, 9 ve 10’a hiç gelinmez.

1iyazıldı2iyazıldı3icontinue4iyazıldı5iyazıldı6icontinue7iyazıldı8ibreak9i10i

Döngü break ile bitti; akış döngüden sonraki satırdan sürer.

for (int i = 1; i <= 10; i++) {
    if (i % 3 == 0) continue;
    if (i == 8) break;
    System.out.print(i + " ");
}
System.out.println("| bitti");

Döngüler

Sonsuz Döngü

-3-2-10123456i < 5hedef: i ≥ 5i-- : hedeften uzaklaşırfor (int i = 0; i < 5; i--) → i = 0, −1, −2, … koşul hep truewhile (i < 5) { … } // i++ yok → i hep 0
  • Koşul hiçbir zaman false olmuyorsa döngü bitmez: program “donmuş” görünür.
  • Sayaç yanlış yönde güncellenmiş ya da hiç güncellenmemiş olabilir.
  • Kasıtlı while (true) döngülerinde de içeride bir break koşulu olmalıdır. Takılırsa programı Ctrl+C ile durdurun.

Doğrulama

Döngü Değişmezi

  • Her turun başında doğru kalan bir özelliktir.
  • Toplam döngüsünde: toplam = 1 + 2 + … + (i − 1).
  • Döngü bitince (i = n + 1) değişmez, sonucun doğru olduğunu söyler.
1234turun başı: i = 1toplam = 0= (boş)

Başlangıçta hiçbir sayı işlenmedi: toplam = 0 (boş toplam). Değişmez baştan doğru.

1234turun başı: i = 2toplam = 1= 1

i = 2 turunun başında toplam, 1 … 1 sayılarının toplamı: 1.

1234turun başı: i = 3toplam = 3= 1 + 2

i = 3 turunun başında toplam, 1 … 2 sayılarının toplamı: 3.

1234turun başı: i = 4toplam = 6= 1 + 2 + 3

i = 4 turunun başında toplam, 1 … 3 sayılarının toplamı: 6.

1234turun başı: i = 5toplam = 10= 1 + 2 + 3 + 4

i = 5 → koşul false. Değişmez hâlâ doğru: toplam = 1 + 2 + 3 + 4 = 10 → sonuç doğru.

Doğrulama

Sınır Hataları (1’den 5’e say)

for (i = 1; i <= 5; i++)-2-101✓2✓3✓4✓5✓6doğru: 5 turfor (i = 1; i < 5; i++)✓✓✓✓bir eksik: 5 işlenmezfor (i = 0; i <= 5; i++)!✓✓✓✓✓bir fazla: 6 turfor (i = 1; i <= 5; i--)!!!✓…yanlış yön: sonsuz
  • < ile <=, 0 ile 1 başlangıcı arasındaki fark bir tur eksik/fazla demektir (“off-by-one”).
  • Test: ilk turu, son turu ve tur sayısını elle kontrol edin.

Örnek

Basamak Sayısı

int sayı = -507;
long kalan = sayı;
if (kalan < 0) kalan = -kalan;
int basamak = 0;
do {
    basamak++;
    kalan /= 10;
} while (kalan > 0);
System.out.println(basamak);
  • Her / 10 son basamağı atar; kaç kez bölündüğünü sayarız.
  • do-while sayesinde 0 da 1 basamak sayılır; ayrı bir özel durum gerekmez.
  • long kopya, -2147483648 gibi uç değerde işaret değiştirirken taşmayı önler.

Örnekler · Kodu adım adım çalıştır

Kod İzleme: basamak sayısı (sayı = −507)

−507kalan = -507sayı-507basamak–

Negatif bir sayıyla deneyelim: sayı = −507.

−507kalan = -507sayı-507basamak–

int değer long’a kopyalanır (−2147483648’in tersi int’e sığmaz, long’a sığar).

507kalan = 507sayı-507basamak–

−507 < 0 → true → kalan = 507. İşaret basamak sayısını değiştirmez.

507kalan = 507sayı-507basamak0

Sayaç basamak = 0.

507kalan = 507sayı-507basamak1

Gövde: bir basamak sayıldı → basamak = 1.

507kalan = 50sayı-507basamak1

kalan = 507 / 10 = 50 (tam sayı bölmesi son basamağı atar).

507kalan = 50sayı-507basamak1

Koşul: 50 > 0 → true → tekrar.

507kalan = 50sayı-507basamak2

Gövde: bir basamak sayıldı → basamak = 2.

507kalan = 5sayı-507basamak2

kalan = 50 / 10 = 5 (tam sayı bölmesi son basamağı atar).

507kalan = 5sayı-507basamak2

Koşul: 5 > 0 → true → tekrar.

507kalan = 5sayı-507basamak3

Gövde: bir basamak sayıldı → basamak = 3.

507kalan = 0sayı-507basamak3

kalan = 5 / 10 = 0 (tam sayı bölmesi son basamağı atar).

507kalan = 0sayı-507basamak3

Koşul: 0 > 0 → false → bitti.

507kalan = 0sayı-507basamak3

3 yazılır. sayı = 0 olsaydı do-while gövdeyi yine bir kez çalıştırır → 1 basamak (doğru).

int sayı = -507;
long kalan = sayı;
if (kalan < 0) kalan = -kalan;
int basamak = 0;
do {
    basamak++;
    kalan /= 10;
} while (kalan > 0);
System.out.println(basamak);

Örnek

Rakamlar Toplamı

int sayı = 725;
long kalan = sayı;
if (kalan < 0) kalan = -kalan;
int toplam = 0;
while (kalan > 0) {
    toplam += (int) (kalan % 10);
    kalan /= 10;
}
System.out.println(toplam);
  • % 10 son rakamı verir.
  • / 10 işlenen son rakamı sayıdan çıkarır.
  • Burada while yeterli: 0 için gövde hiç çalışmaz, toplam 0 kalır (doğru).

Örnekler · Kodu adım adım çalıştır

Kod İzleme: rakamlar toplamı (sayı = 725)

725kalan = 725toplam–

Rakamları 7, 2 ve 5 olan sayı: 725.

725kalan = 725toplam–

Üzerinde çalışmak için kopya: kalan = 725.

725kalan = 725toplam–

725 < 0 → false: işaret değişmez.

725kalan = 725toplam0

Biriktirici toplam = 0.

725kalan = 725toplam0

Koşul: 725 > 0 → true.

725kalan = 725% 10 → 5toplam5

Son rakam 725 % 10 = 5; toplam = 0 + 5 = 5.

725kalan = 72toplam5

kalan = 725 / 10 = 72: işlenen rakam atıldı.

725kalan = 72toplam5

Koşul: 72 > 0 → true.

725kalan = 72% 10 → 2toplam7

Son rakam 72 % 10 = 2; toplam = 5 + 2 = 7.

725kalan = 7toplam7

kalan = 72 / 10 = 7: işlenen rakam atıldı.

725kalan = 7toplam7

Koşul: 7 > 0 → true.

725kalan = 7% 10 → 7toplam14

Son rakam 7 % 10 = 7; toplam = 7 + 7 = 14.

725kalan = 0toplam14

kalan = 7 / 10 = 0: işlenen rakam atıldı.

725kalan = 0toplam14

Koşul: 0 > 0 → false.

725kalan = 0toplam14

14 yazılır: 7 + 2 + 5 = 14. sayı değişmedi, yalnızca kopyası (kalan) tüketildi.

int sayı = 725;
long kalan = sayı;
if (kalan < 0) kalan = -kalan;
int toplam = 0;
while (kalan > 0) {
    toplam += (int) (kalan % 10);
    kalan /= 10;
}
System.out.println(toplam);

Örnek

Üs Alma

int taban = 2, üs = 4;
int sonuç = 1;
for (int i = 0; i < üs; i++) {
    sonuç *= taban;
}
System.out.println(sonuç);
  • Döngü tam üs kez çalışır; her tur bir kez tabanla çarpar.
  • üs = 0 ise döngü hiç çalışmaz, sonuç 1 kalır (2⁰ = 1).
  • Negatif üsleri kapsamaz; büyük sonuçlar int sınırını aşar.

Örnekler · Kodu adım adım çalıştır

Kod İzleme: 2⁴

int i = 0başlangıçi < üskoşulsonuç *= tabangövdei++güncellemetruetekrar (koşula dön)falseprintln(sonuç)döngüden sonrataban2üs4

2⁴ hesaplanacak: taban = 2, üs = 4.

int i = 0başlangıçi < üskoşulsonuç *= tabangövdei++güncellemetruetekrar (koşula dön)falseprintln(sonuç)döngüden sonrataban2üs4sonuç1

Çarpımın etkisiz elemanı 1: sonuç = 1 (= 2⁰).

int i = 0başlangıçi < üskoşulsonuç *= tabangövdei++güncellemetruetekrar (koşula dön)falseprintln(sonuç)döngüden sonrataban2üs4sonuç1i0

Başlangıç: i = 0. Döngü üs kez (0, 1, 2, 3) dönecek.

int i = 0başlangıçi < üskoşulsonuç *= tabangövdei++güncellemetruetekrar (koşula dön)falseprintln(sonuç)döngüden sonrataban2üs4sonuç1i0

Koşul: 0 < 4 → true.

int i = 0başlangıçi < üskoşulsonuç *= tabangövdei++güncellemetruetekrar (koşula dön)falseprintln(sonuç)döngüden sonrataban2üs4sonuç2i0

sonuç = 1 × 2 = 2 (= 21).

int i = 0başlangıçi < üskoşulsonuç *= tabangövdei++güncellemetruetekrar (koşula dön)falseprintln(sonuç)döngüden sonrataban2üs4sonuç2i1

Güncelleme: i = 1.

int i = 0başlangıçi < üskoşulsonuç *= tabangövdei++güncellemetruetekrar (koşula dön)falseprintln(sonuç)döngüden sonrataban2üs4sonuç2i1

Koşul: 1 < 4 → true.

int i = 0başlangıçi < üskoşulsonuç *= tabangövdei++güncellemetruetekrar (koşula dön)falseprintln(sonuç)döngüden sonrataban2üs4sonuç4i1

sonuç = 2 × 2 = 4 (= 22).

int i = 0başlangıçi < üskoşulsonuç *= tabangövdei++güncellemetruetekrar (koşula dön)falseprintln(sonuç)döngüden sonrataban2üs4sonuç4i2

Güncelleme: i = 2.

int i = 0başlangıçi < üskoşulsonuç *= tabangövdei++güncellemetruetekrar (koşula dön)falseprintln(sonuç)döngüden sonrataban2üs4sonuç4i2

Koşul: 2 < 4 → true.

int i = 0başlangıçi < üskoşulsonuç *= tabangövdei++güncellemetruetekrar (koşula dön)falseprintln(sonuç)döngüden sonrataban2üs4sonuç8i2

sonuç = 4 × 2 = 8 (= 23).

int i = 0başlangıçi < üskoşulsonuç *= tabangövdei++güncellemetruetekrar (koşula dön)falseprintln(sonuç)döngüden sonrataban2üs4sonuç8i3

Güncelleme: i = 3.

int i = 0başlangıçi < üskoşulsonuç *= tabangövdei++güncellemetruetekrar (koşula dön)falseprintln(sonuç)döngüden sonrataban2üs4sonuç8i3

Koşul: 3 < 4 → true.

int i = 0başlangıçi < üskoşulsonuç *= tabangövdei++güncellemetruetekrar (koşula dön)falseprintln(sonuç)döngüden sonrataban2üs4sonuç16i3

sonuç = 8 × 2 = 16 (= 24).

int i = 0başlangıçi < üskoşulsonuç *= tabangövdei++güncellemetruetekrar (koşula dön)falseprintln(sonuç)döngüden sonrataban2üs4sonuç16i4

Güncelleme: i = 4.

int i = 0başlangıçi < üskoşulsonuç *= tabangövdei++güncellemetruetekrar (koşula dön)falseprintln(sonuç)döngüden sonrataban2üs4sonuç16i4

Koşul: 4 < 4 → false.

int i = 0başlangıçi < üskoşulsonuç *= tabangövdei++güncellemetruetekrar (koşula dön)falseprintln(sonuç)döngüden sonrataban2üs4sonuç16

16 yazılır. Değişmez: her turun başında sonuç = 2i.

int taban = 2, üs = 4;
int sonuç = 1;
for (int i = 0; i < üs; i++) {
    sonuç *= taban;
}
System.out.println(sonuç);

Örnek

Asal Sayı

int n = 29;
boolean asal = n >= 2;
for (int i = 2; asal && i <= n / i; i++) {
    if (n % i == 0) asal = false;
}
System.out.println(asal);
  • 0 ve 1 asal değildir: asal = n >= 2.
  • Bölen aramak için √n’e kadar gitmek yeter: i <= n / i ≡ i × i ≤ n (taşma riski yok).
  • asal && sayesinde bölen bulununca döngü durur.

Örnekler · Kodu adım adım çalıştır

Kod İzleme: 29 asal mı?

2i3i4i5i6ibölen adayların29asal?

n = 29 asal mı?

2i3i4i5i6ibölen adayların29asaltrue

29 >= 2 → true. Aksi kanıtlanana kadar asal kabul ediyoruz.

2i29 / 2 = 143i4i5i6ibölen adayların29asaltrue

Başlangıç: ilk bölen adayı i = 2.

2i29 / 2 = 143i4i5i6ibölen adayların29asaltrue

Koşul: true && 2 <= 29/2 = 14 → true.

2i29 % 2 = 13i4i5i6ibölen adayların29asaltrue

29 % 2 = 1 → bölmüyor.

2i29 % 2 = 13i29 / 3 = 94i5i6ibölen adayların29asaltrue

Güncelleme: i = 3.

2i29 % 2 = 13i29 / 3 = 94i5i6ibölen adayların29asaltrue

Koşul: true && 3 <= 29/3 = 9 → true.

2i29 % 2 = 13i29 % 3 = 24i5i6ibölen adayların29asaltrue

29 % 3 = 2 → bölmüyor.

2i29 % 2 = 13i29 % 3 = 24i29 / 4 = 75i6ibölen adayların29asaltrue

Güncelleme: i = 4.

2i29 % 2 = 13i29 % 3 = 24i29 / 4 = 75i6ibölen adayların29asaltrue

Koşul: true && 4 <= 29/4 = 7 → true.

2i29 % 2 = 13i29 % 3 = 24i29 % 4 = 15i6ibölen adayların29asaltrue

29 % 4 = 1 → bölmüyor.

2i29 % 2 = 13i29 % 3 = 24i29 % 4 = 15i29 / 5 = 56ibölen adayların29asaltrue

Güncelleme: i = 5.

2i29 % 2 = 13i29 % 3 = 24i29 % 4 = 15i29 / 5 = 56ibölen adayların29asaltrue

Koşul: true && 5 <= 29/5 = 5 → true.

2i29 % 2 = 13i29 % 3 = 24i29 % 4 = 15i29 % 5 = 46ibölen adayların29asaltrue

29 % 5 = 4 → bölmüyor.

2i29 % 2 = 13i29 % 3 = 24i29 % 4 = 15i29 % 5 = 46i29 / 6 = 4bölen adayların29asaltrue

Güncelleme: i = 6.

2i29 % 2 = 13i29 % 3 = 24i29 % 4 = 15i29 % 5 = 46ibölen adayların29asaltrue

Koşul: true && 6 <= 29/6 = 4 → false: √29’i geçtik, daha büyük bölen aramaya gerek yok.

2i29 % 2 = 13i29 % 3 = 24i29 % 4 = 15i29 % 5 = 46ibölen adayların29asaltrue

true yazılır. 4 bölen denendi.

int n = 29;
boolean asal = n >= 2;
for (int i = 2; asal && i <= n / i; i++) {
    if (n % i == 0) asal = false;
}
System.out.println(asal);

Örnekler · Kodu adım adım çalıştır

Kod İzleme (devam): 21 asal mı?

2i3i4i5i6ibölen adayların21asal?

n = 21 asal mı?

2i3i4i5i6ibölen adayların21asaltrue

21 >= 2 → true. Aksi kanıtlanana kadar asal kabul ediyoruz.

2i21 / 2 = 103i4i5i6ibölen adayların21asaltrue

Başlangıç: ilk bölen adayı i = 2.

2i21 / 2 = 103i4i5i6ibölen adayların21asaltrue

Koşul: true && 2 <= 21/2 = 10 → true.

2i21 % 2 = 13i4i5i6ibölen adayların21asaltrue

21 % 2 = 1 → bölmüyor.

2i21 % 2 = 13i21 / 3 = 74i5i6ibölen adayların21asaltrue

Güncelleme: i = 3.

2i21 % 2 = 13i21 / 3 = 74i5i6ibölen adayların21asaltrue

Koşul: true && 3 <= 21/3 = 7 → true.

2i21 % 2 = 13i21 % 3 = 04i5i6ibölen adayların21asalfalse

21 % 3 = 0 → bölen bulundu: asal = false.

2i21 % 2 = 13i21 % 3 = 04i5i6ibölen adayların21asalfalse

Güncelleme: i = 4.

2i21 % 2 = 13i21 % 3 = 04i5i6ibölen adayların21asalfalse

Koşul: asal = false → && kısa devre yapar, i <= n / i hiç hesaplanmaz → döngü biter.

2i21 % 2 = 13i21 % 3 = 04i5i6ibölen adayların21asalfalse

false yazılır. Bölen bulunur bulunmaz döngü durdu.

int n = 21;
boolean asal = n >= 2;
for (int i = 2; asal && i <= n / i; i++) {
    if (n % i == 0) asal = false;
}
System.out.println(asal);

Örnek

Fibonacci Serisi

int adet = 5;
long a = 0, b = 1;
for (int i = 0; i < adet; i++) {
    System.out.print(a + " ");
    long sonraki = a + b;
    a = b;
    b = sonraki;
}
  • Her terim önceki ikisinin toplamı: 0 1 1 2 3 5 8 …
  • Güncelleme sırası iki önceki değeri korur; b = sonraki önce yazılsaydı eski b kaybolurdu.
  • Seri hızlı büyür; long bile 93. terimden sonra taşar.

Örnekler · Kodu adım adım çalıştır

Kod İzleme: ilk 5 Fibonacci sayısı

yazılan seria–b–sonraki–

İlk 5 Fibonacci sayısı yazılacak.

yazılan seria0b1sonraki–

Serinin ilk iki terimi: a = 0, b = 1.

0yazılan seria0b1sonraki–

i = 0 < 5 → true. Sıradaki terim a = 0 yazılır.

0yazılan seria0b1sonraki1

sonraki = 0 + 1 = 1.

0yazılan seria ← b ← sonrakia1b1sonraki1

Kaydırma: a = 1, b = 1. Sıra önemli: önce a = b, sonra b = sonraki. Sonra i++.

01yazılan seria1b1sonraki–

i = 1 < 5 → true. Sıradaki terim a = 1 yazılır.

01yazılan seria1b1sonraki2

sonraki = 1 + 1 = 2.

01yazılan seria ← b ← sonrakia1b2sonraki2

Kaydırma: a = 1, b = 2. Sıra önemli: önce a = b, sonra b = sonraki. Sonra i++.

011yazılan seria1b2sonraki–

i = 2 < 5 → true. Sıradaki terim a = 1 yazılır.

011yazılan seria1b2sonraki3

sonraki = 1 + 2 = 3.

011yazılan seria ← b ← sonrakia2b3sonraki3

Kaydırma: a = 2, b = 3. Sıra önemli: önce a = b, sonra b = sonraki. Sonra i++.

0112yazılan seria2b3sonraki–

i = 3 < 5 → true. Sıradaki terim a = 2 yazılır.

0112yazılan seria2b3sonraki5

sonraki = 2 + 3 = 5.

0112yazılan seria ← b ← sonrakia3b5sonraki5

Kaydırma: a = 3, b = 5. Sıra önemli: önce a = b, sonra b = sonraki. Sonra i++.

01123yazılan seria3b5sonraki–

i = 4 < 5 → true. Sıradaki terim a = 3 yazılır.

01123yazılan seria3b5sonraki8

sonraki = 3 + 5 = 8.

01123yazılan seria ← b ← sonrakia5b8sonraki8

Kaydırma: a = 5, b = 8. Sıra önemli: önce a = b, sonra b = sonraki. Sonra i++.

01123yazılan seria5b8sonraki–

Koşul: 5 < 5 → false → döngü biter. Çıktı: 0 1 1 2 3.

int adet = 5;
long a = 0, b = 1;
for (int i = 0; i < adet; i++) {
    System.out.print(a + " ");
    long sonraki = a + b;
    a = b;
    b = sonraki;
}

Döngüler

İç İçe Döngü

for (int satır = 0; satır < 3; satır++) {
  for (int sütun = 0; sütun < 4; sütun++) {
    System.out.printf("(%d,%d) ", satır, sütun);
  }
  System.out.println();
}
sütun 0sütun 1sütun 2sütun 3satır 0(0,0)(0,1)(0,2)(0,3)satır 1(1,0)(1,1)(1,2)(1,3)satır 2(2,0)(2,1)(2,2)(2,3)dış döngü →satır seçeriç döngü →hücreleri gezer
  • İç döngü, dış döngünün her turunda baştan sona tamamlanır.
  • Gövde satır × sütun = 3 × 4 = 12 kez çalışır.

Döngüler · Kodu adım adım çalıştır

Kod İzleme: 3 × 4 ızgara

sütun 0sütun 1sütun 2sütun 3satır 0(0,0)satır 1satır 2dış döngü →satır seçeriç döngü →hücreleri gezer

Dış döngü satır = 0; iç döngü sütun = 0’dan başlar → (0,0).

sütun 0sütun 1sütun 2sütun 3satır 0(0,0)(0,1)satır 1satır 2dış döngü →satır seçeriç döngü →hücreleri gezer

sütun++ → 1 < 4 → true → (0,1) yazılır.

sütun 0sütun 1sütun 2sütun 3satır 0(0,0)(0,1)(0,2)satır 1satır 2dış döngü →satır seçeriç döngü →hücreleri gezer

sütun++ → 2 < 4 → true → (0,2) yazılır.

sütun 0sütun 1sütun 2sütun 3satır 0(0,0)(0,1)(0,2)(0,3)satır 1satır 2dış döngü →satır seçeriç döngü →hücreleri gezer

sütun++ → 3 < 4 → true → (0,3) yazılır.

sütun 0sütun 1sütun 2sütun 3satır 0(0,0)(0,1)(0,2)(0,3)satır 1satır 2dış döngü →satır seçeriç döngü →hücreleri gezer

sütun = 4 < 4 → false: iç döngü bitti. println satırı sonlandırır.

sütun 0sütun 1sütun 2sütun 3satır 0(0,0)(0,1)(0,2)(0,3)satır 1(1,0)satır 2dış döngü →satır seçeriç döngü →hücreleri gezer

satır++ → satır = 1; iç döngü yeniden sütun = 0’dan başlar.

sütun 0sütun 1sütun 2sütun 3satır 0(0,0)(0,1)(0,2)(0,3)satır 1(1,0)(1,1)satır 2dış döngü →satır seçeriç döngü →hücreleri gezer

sütun++ → 1 < 4 → true → (1,1) yazılır.

sütun 0sütun 1sütun 2sütun 3satır 0(0,0)(0,1)(0,2)(0,3)satır 1(1,0)(1,1)(1,2)satır 2dış döngü →satır seçeriç döngü →hücreleri gezer

sütun++ → 2 < 4 → true → (1,2) yazılır.

sütun 0sütun 1sütun 2sütun 3satır 0(0,0)(0,1)(0,2)(0,3)satır 1(1,0)(1,1)(1,2)(1,3)satır 2dış döngü →satır seçeriç döngü →hücreleri gezer

sütun++ → 3 < 4 → true → (1,3) yazılır.

sütun 0sütun 1sütun 2sütun 3satır 0(0,0)(0,1)(0,2)(0,3)satır 1(1,0)(1,1)(1,2)(1,3)satır 2dış döngü →satır seçeriç döngü →hücreleri gezer

sütun = 4 < 4 → false: iç döngü bitti. println satırı sonlandırır.

sütun 0sütun 1sütun 2sütun 3satır 0(0,0)(0,1)(0,2)(0,3)satır 1(1,0)(1,1)(1,2)(1,3)satır 2(2,0)dış döngü →satır seçeriç döngü →hücreleri gezer

satır++ → satır = 2; iç döngü yeniden sütun = 0’dan başlar.

sütun 0sütun 1sütun 2sütun 3satır 0(0,0)(0,1)(0,2)(0,3)satır 1(1,0)(1,1)(1,2)(1,3)satır 2(2,0)(2,1)dış döngü →satır seçeriç döngü →hücreleri gezer

sütun++ → 1 < 4 → true → (2,1) yazılır.

sütun 0sütun 1sütun 2sütun 3satır 0(0,0)(0,1)(0,2)(0,3)satır 1(1,0)(1,1)(1,2)(1,3)satır 2(2,0)(2,1)(2,2)dış döngü →satır seçeriç döngü →hücreleri gezer

sütun++ → 2 < 4 → true → (2,2) yazılır.

sütun 0sütun 1sütun 2sütun 3satır 0(0,0)(0,1)(0,2)(0,3)satır 1(1,0)(1,1)(1,2)(1,3)satır 2(2,0)(2,1)(2,2)(2,3)dış döngü →satır seçeriç döngü →hücreleri gezer

sütun++ → 3 < 4 → true → (2,3) yazılır.

sütun 0sütun 1sütun 2sütun 3satır 0(0,0)(0,1)(0,2)(0,3)satır 1(1,0)(1,1)(1,2)(1,3)satır 2(2,0)(2,1)(2,2)(2,3)dış döngü →satır seçeriç döngü →hücreleri gezer

sütun = 4 < 4 → false: iç döngü bitti. println satırı sonlandırır.

sütun 0sütun 1sütun 2sütun 3satır 0(0,0)(0,1)(0,2)(0,3)satır 1(1,0)(1,1)(1,2)(1,3)satır 2(2,0)(2,1)(2,2)(2,3)dış döngü →satır seçeriç döngü →hücreleri gezer

satır = 3 < 3 → false: dış döngü de bitti. Toplam 3 × 4 = 12 printf.

for (int satır = 0; satır < 3; satır++) {
  for (int sütun = 0; sütun < 4; sütun++) {
    System.out.printf("(%d,%d) ", satır, sütun);
  }
  System.out.println();
}

Örnek

Desen Problemini Çözme

  1. Beklenen çıktıyı küçük bir n (ör. 4) için kareli kâğıda çizin.
  2. Her satırda kaç boşluk ve kaç karakter olduğunu tabloya dökün.
  3. Sayıları satır numarasıyla ilişkilendirin (3, 2, 1, 0 → n − satır).
  4. Dış döngü = satır; her parça için bir iç döngü.
1234boşlukyıldızsatır 1···*31satır 2··**22satır 3·***13satır 4****04n − satırsatır

Örnek

Artan Üçgen

int n = 4;
for (int satır = 1; satır <= n; satır++) {
    for (int sütun = 1; sütun <= satır; sütun++) {
        System.out.print("*");
    }
    System.out.println();
}
  • Satır r ise r yıldız yazılır.
  • İç döngünün üst sınırı dış döngü değişkenidir.

Örnekler · Kodu adım adım çalıştır

Kod İzleme: artan üçgen (n = 4)

1234satır 1satır 2satır 3satır 4· = boşlukturuncu = imleç

n = 4 satırlık üçgen. Izgarada her hücre bir karakter.

1234satır 1*satır 2satır 3satır 4· = boşlukturuncu = imleç

satır = 1: iç döngü sütun = 1 … 1 → bu satıra 1 yıldız.

1234satır 1*satır 2satır 3satır 4· = boşlukturuncu = imleç

sütun = 2 <= 1 → false. println ile alt satıra geçilir.

1234satır 1*satır 2*satır 3satır 4· = boşlukturuncu = imleç

satır = 2: iç döngü sütun = 1 … 2 → bu satıra 2 yıldız.

1234satır 1*satır 2**satır 3satır 4· = boşlukturuncu = imleç

sütun = 2 <= 2 → true → *

1234satır 1*satır 2**satır 3satır 4· = boşlukturuncu = imleç

sütun = 3 <= 2 → false. println ile alt satıra geçilir.

1234satır 1*satır 2**satır 3*satır 4· = boşlukturuncu = imleç

satır = 3: iç döngü sütun = 1 … 3 → bu satıra 3 yıldız.

1234satır 1*satır 2**satır 3**satır 4· = boşlukturuncu = imleç

sütun = 2 <= 3 → true → *

1234satır 1*satır 2**satır 3***satır 4· = boşlukturuncu = imleç

sütun = 3 <= 3 → true → *

1234satır 1*satır 2**satır 3***satır 4· = boşlukturuncu = imleç

sütun = 4 <= 3 → false. println ile alt satıra geçilir.

1234satır 1*satır 2**satır 3***satır 4*· = boşlukturuncu = imleç

satır = 4: iç döngü sütun = 1 … 4 → bu satıra 4 yıldız.

1234satır 1*satır 2**satır 3***satır 4**· = boşlukturuncu = imleç

sütun = 2 <= 4 → true → *

1234satır 1*satır 2**satır 3***satır 4***· = boşlukturuncu = imleç

sütun = 3 <= 4 → true → *

1234satır 1*satır 2**satır 3***satır 4****· = boşlukturuncu = imleç

sütun = 4 <= 4 → true → *

1234satır 1*satır 2**satır 3***satır 4****· = boşlukturuncu = imleç

sütun = 5 <= 4 → false. println ile alt satıra geçilir.

1234satır 1*satır 2**satır 3***satır 4****· = boşlukturuncu = imleç

satır = 5 <= 4 → false: bitti. Toplam 1 + 2 + 3 + 4 = 10 yıldız.

int n = 4;
for (int satır = 1; satır <= n; satır++) {
  for (int sütun = 1; sütun <= satır; sütun++) {
    System.out.print("*");
  }
  System.out.println();
}

Örnek

Sağa Yaslı Üçgen

int n = 3;
for (int satır = 1; satır <= n; satır++) {
    for (int boşluk = 0; boşluk < n - satır; boşluk++)
        System.out.print(" ");
    for (int yıldız = 0; yıldız < satır; yıldız++)
        System.out.print("*");
    System.out.println();
}
  • Her satır boşluk bölümü ve karakter bölümünden oluşur.
  • Boşluk azalırken yıldız artar.

Örnekler · Kodu adım adım çalıştır

Kod İzleme: sağa yaslı üçgen (n = 3)

123satır 1satır 2satır 3· = boşlukturuncu = imleç

n = 3. Her satır: önce n − satır boşluk, sonra satır yıldız.

123satır 1·satır 2satır 3· = boşlukturuncu = imleç

satır = 1: 2 boşluk gerekiyor. boşluk = 0 → ' ' yazılır.

123satır 1··satır 2satır 3· = boşlukturuncu = imleç

boşluk = 1 < 2 → ' ' yazılır.

123satır 1··*satır 2satır 3· = boşlukturuncu = imleç

Boşluklar bitti; 1 yıldız: yıldız = 0 → *

123satır 1··*satır 2satır 3· = boşlukturuncu = imleç

Satır tamam (her satır n = 3 karakter): println.

123satır 1··*satır 2·satır 3· = boşlukturuncu = imleç

satır = 2: 1 boşluk gerekiyor. boşluk = 0 → ' ' yazılır.

123satır 1··*satır 2·*satır 3· = boşlukturuncu = imleç

Boşluklar bitti; 2 yıldız: yıldız = 0 → *

123satır 1··*satır 2·**satır 3· = boşlukturuncu = imleç

yıldız = 1 < 2 → *

123satır 1··*satır 2·**satır 3· = boşlukturuncu = imleç

Satır tamam (her satır n = 3 karakter): println.

123satır 1··*satır 2·**satır 3· = boşlukturuncu = imleç

satır = 3: boşluk < 3 − 3 = 0 → false: bu satırda hiç boşluk yok.

123satır 1··*satır 2·**satır 3*· = boşlukturuncu = imleç

Boşluklar bitti; 3 yıldız: yıldız = 0 → *

123satır 1··*satır 2·**satır 3**· = boşlukturuncu = imleç

yıldız = 1 < 3 → *

123satır 1··*satır 2·**satır 3***· = boşlukturuncu = imleç

yıldız = 2 < 3 → *

123satır 1··*satır 2·**satır 3***· = boşlukturuncu = imleç

Satır tamam (her satır n = 3 karakter): println.

int n = 3;
for (int satır = 1; satır <= n; satır++) {
  for (int boşluk = 0; boşluk < n - satır; boşluk++)
    System.out.print(" ");
  for (int yıldız = 0; yıldız < satır; yıldız++)
    System.out.print("*");
  System.out.println();
}

Örnek

Satıra Göre Sayılar

DesenBoşlukKarakter
Artan üçgen0satır
Azalan üçgen0n - satır + 1
Sağa yaslın - satırsatır
Piramitn - satır2 × satır - 1

Örnek

Sayı Üçgeni

int n = 4;
for (int satır = 1; satır <= n; satır++) {
    for (int değer = 1; değer <= satır; değer++) {
        System.out.print(değer + " ");
    }
    System.out.println();
}
  • Yazdırılan değer sütun değişkeninden gelir.
  • Aynı yapı karakter yerine sayı üretir.

Örnekler · Kodu adım adım çalıştır

Kod İzleme: sayı üçgeni (n = 4)

1234satır 1satır 2satır 3satır 4· = boşlukturuncu = imleç

Her hücreye bir değer + " " (sayı ve boşluk) yazılır.

1234satır 11satır 2satır 3satır 4· = boşlukturuncu = imleç

satır = 1: değer 1’den 1’e kadar. değer = 1 → “1 ”

1234satır 11satır 2satır 3satır 4· = boşlukturuncu = imleç

değer = 2 <= 1 → false; println.

1234satır 11satır 21satır 3satır 4· = boşlukturuncu = imleç

satır = 2: değer 1’den 2’e kadar. değer = 1 → “1 ”

1234satır 11satır 212satır 3satır 4· = boşlukturuncu = imleç

değer = 2 → “2 ” (yazılan sayı iç döngü değişkeni).

1234satır 11satır 212satır 3satır 4· = boşlukturuncu = imleç

değer = 3 <= 2 → false; println.

1234satır 11satır 212satır 31satır 4· = boşlukturuncu = imleç

satır = 3: değer 1’den 3’e kadar. değer = 1 → “1 ”

1234satır 11satır 212satır 312satır 4· = boşlukturuncu = imleç

değer = 2 → “2 ” (yazılan sayı iç döngü değişkeni).

1234satır 11satır 212satır 3123satır 4· = boşlukturuncu = imleç

değer = 3 → “3 ” (yazılan sayı iç döngü değişkeni).

1234satır 11satır 212satır 3123satır 4· = boşlukturuncu = imleç

değer = 4 <= 3 → false; println.

1234satır 11satır 212satır 3123satır 41· = boşlukturuncu = imleç

satır = 4: değer 1’den 4’e kadar. değer = 1 → “1 ”

1234satır 11satır 212satır 3123satır 412· = boşlukturuncu = imleç

değer = 2 → “2 ” (yazılan sayı iç döngü değişkeni).

1234satır 11satır 212satır 3123satır 4123· = boşlukturuncu = imleç

değer = 3 → “3 ” (yazılan sayı iç döngü değişkeni).

1234satır 11satır 212satır 3123satır 41234· = boşlukturuncu = imleç

değer = 4 → “4 ” (yazılan sayı iç döngü değişkeni).

1234satır 11satır 212satır 3123satır 41234· = boşlukturuncu = imleç

değer = 5 <= 4 → false; println.

int n = 4;
for (int satır = 1; satır <= n; satır++) {
  for (int değer = 1; değer <= satır; değer++) {
    System.out.print(değer + " ");
  }
  System.out.println();
}

Örnek

İçi Boş Kare

int n = 4;
for (int i = 0; i < n; i++) {
  for (int j = 0; j < n; j++) {
    if (i == 0 || i == n - 1 || j == 0 || j == n - 1)
      System.out.print("*");
    else
      System.out.print(" ");
  }
  System.out.println();
}
  • Yalnızca ilk/son satır veya ilk/son sütun yıldızdır.
  • ||: dört koşuldan biri true ise yeter.
  • Diğer hücrelere boşluk yazılır; yoksa kare kayar.

Örnekler · Kodu adım adım çalıştır

Kod İzleme: içi boş kare (n = 4)

0123i = 0i = 1i = 2i = 3· = boşlukturuncu = imleç

n = 4. Kenar: ilk/son satır (i = 0, 3) veya ilk/son sütun (j = 0, 3).

0123i = 0*i = 1i = 2i = 3· = boşlukturuncu = imleç

i = 0, j = 0: i == 0 → true → *

0123i = 0**i = 1i = 2i = 3· = boşlukturuncu = imleç

i = 0, j = 1: i == 0 → true → *

0123i = 0***i = 1i = 2i = 3· = boşlukturuncu = imleç

i = 0, j = 2: i == 0 → true → *

0123i = 0****i = 1i = 2i = 3· = boşlukturuncu = imleç

i = 0, j = 3: i == 0 → true → *

0123i = 0****i = 1i = 2i = 3· = boşlukturuncu = imleç

j = 4 < 4 → false; println.

0123i = 0****i = 1*i = 2i = 3· = boşlukturuncu = imleç

i = 1, j = 0: j == 0 → true → *

0123i = 0****i = 1*·i = 2i = 3· = boşlukturuncu = imleç

i = 1, j = 1: dört koşulun hepsi false → else → boşluk

0123i = 0****i = 1*··i = 2i = 3· = boşlukturuncu = imleç

i = 1, j = 2: dört koşulun hepsi false → else → boşluk

0123i = 0****i = 1*··*i = 2i = 3· = boşlukturuncu = imleç

i = 1, j = 3: j == 3 → true → *

0123i = 0****i = 1*··*i = 2i = 3· = boşlukturuncu = imleç

j = 4 < 4 → false; println.

int n = 4;
for (int i = 0; i < n; i++) {
  for (int j = 0; j < n; j++) {
    if (i == 0 || i == n - 1 || j == 0 || j == n - 1)
      System.out.print("*");
    else
      System.out.print(" ");
  }
  System.out.println();
}

Örnekler · Kodu adım adım çalıştır

Kod İzleme (devam): satır 2 ve 3

0123i = 0****i = 1*··*i = 2*i = 3· = boşlukturuncu = imleç

i = 2, j = 0: j == 0 → true → *

0123i = 0****i = 1*··*i = 2*·i = 3· = boşlukturuncu = imleç

i = 2, j = 1: dört koşulun hepsi false → else → boşluk

0123i = 0****i = 1*··*i = 2*··i = 3· = boşlukturuncu = imleç

i = 2, j = 2: dört koşulun hepsi false → else → boşluk

0123i = 0****i = 1*··*i = 2*··*i = 3· = boşlukturuncu = imleç

i = 2, j = 3: j == 3 → true → *

0123i = 0****i = 1*··*i = 2*··*i = 3· = boşlukturuncu = imleç

j = 4 < 4 → false; println.

0123i = 0****i = 1*··*i = 2*··*i = 3*· = boşlukturuncu = imleç

i = 3, j = 0: i == 3 → true → *

0123i = 0****i = 1*··*i = 2*··*i = 3**· = boşlukturuncu = imleç

i = 3, j = 1: i == 3 → true → *

0123i = 0****i = 1*··*i = 2*··*i = 3***· = boşlukturuncu = imleç

i = 3, j = 2: i == 3 → true → *

0123i = 0****i = 1*··*i = 2*··*i = 3****· = boşlukturuncu = imleç

i = 3, j = 3: i == 3 → true → *

0123i = 0****i = 1*··*i = 2*··*i = 3****· = boşlukturuncu = imleç

j = 4 < 4 → false; println.

0123i = 0****i = 1*··*i = 2*··*i = 3****· = boşlukturuncu = imleç

i = 4 < 4 → false: kare tamam. 16 hücrenin 12’si kenar.

int n = 4;
for (int i = 0; i < n; i++) {
  for (int j = 0; j < n; j++) {
    if (i == 0 || i == n - 1 || j == 0 || j == n - 1)
      System.out.print("*");
    else
      System.out.print(" ");
  }
  System.out.println();
}

Örnek

Sık Hatalar

  • println çağrısını iç döngüye koymak her karakteri ayrı satıra yazar.
  • < ve <= farkı bir eksik veya bir fazla karakter üretir.
  • Boşluğu yıldızdan sonra yazmak hizalamayı tersine çevirir.
  • Dış döngü değişkenini iç döngüde yanlış güncellemek akışı bozar.
doğru******println iç döngüde******

Örnek

Test Tasarımı

  • Her problem için normal bir değer seçin.
  • 0, 1, negatif ve üst sınıra yakın değerleri ayrı test edin.
  • Beklenen sonucu kodu çalıştırmadan hesaplayın.
  • Değişkenleri tur tur izleyerek ilk sapmayı bulun.
Basamak sayısı testisayıbeklenen
Normal40964
Sıfır01
Negatif−5073
Uç değer−214748364810

Özet

Bölüm Özeti

  • Her döngü başlangıç, koşul, gövde ve güncelleme parçalarından oluşur.
  • Tekrar sayısı belliyse for, koşul sürdükçe while, en az bir tur gerekiyorsa do-while seçilir.
  • Sayaç ve biriktirici kalıpları basamak, üs ve seri problemlerinde tekrar kullanılır.
  • İç içe döngüde dış döngü satırı, iç döngü satırdaki öğeleri üretir.
  • Döngüler 0, 1 ve sınır değerleriyle elle izlenerek test edilmelidir.

Özet

Kontrol Soruları

  1. while ve do-while arasındaki temel fark nedir?
  2. break ile continue ne yapar?
  3. Rakamlar toplamında % 10 ve / 10 ne işe yarar?
  4. Artan üçgende iç döngünün üst sınırı neden satır değişkenidir?
  5. println iç döngüye yazılırsa çıktı nasıl değişir?

Son

Döngüler
1 / 1Sercan KÜLCÜ, Tüm hakları saklıdır.

← → veya boşluk ile gezinin · F: tam ekran · Home/End: ilk/son slayt