Döngüler
Giriş
Öğrenme Çıktıları
for, while ve do-while yapılarını seçmek.
Sayaç ve biriktirici ile hesap yapmak.
İç içe döngülerle satır-sütun desenleri üretmek.
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.
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.
Döngüler · Kodu adım adım çalıştır
Kod İzleme: for ile 1 + 2 + 3 + 4
n = 4: 1’den 4’e kadar toplayacağız.
Biriktirici toplam = 0 ile başlar (henüz hiçbir sayı eklenmedi).
Başlangıç: int i = 1 yalnızca bir kez çalışır.
Koşul: i <= n → 1 <= 4 → true → gövdeye gir.
Gövde: toplam = 0 + 1 = 1.
Güncelleme: i++ → i = 2. Sonra yine koşula dönülür.
Koşul: i <= n → 2 <= 4 → true → gövdeye gir.
Gövde: toplam = 1 + 2 = 3.
Güncelleme: i++ → i = 3. Sonra yine koşula dönülür.
Koşul: i <= n → 3 <= 4 → true → gövdeye gir.
Gövde: toplam = 3 + 3 = 6.
Güncelleme: i++ → i = 4. Sonra yine koşula dönülür.
Koşul: i <= n → 4 <= 4 → true → gövdeye gir.
Gövde: toplam = 6 + 4 = 10.
Güncelleme: i++ → i = 5. Sonra yine koşula dönülür.
Koşul: i <= n → 5 <= 4 → false → döngü biter.
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.
Döngüler · Kodu adım adım çalıştır
Kod İzleme: while ile 5!
Başlangıç: sayı = 5 (5! hesaplanacak).
Çarpım biriktiricisi 1 ile başlar (0 olsaydı sonuç hep 0 olurdu).
Koşul: 5 > 1 → true → gövde çalışır.
faktöriyel = 1 × 5 = 5.
Güncelleme: sayı-- → 4. Koşul sona yaklaşır.
Koşul: 4 > 1 → true → gövde çalışır.
faktöriyel = 5 × 4 = 20.
Güncelleme: sayı-- → 3. Koşul sona yaklaşır.
Koşul: 3 > 1 → true → gövde çalışır.
faktöriyel = 20 × 3 = 60.
Güncelleme: sayı-- → 2. Koşul sona yaklaşır.
Koşul: 2 > 1 → true → gövde çalışır.
faktöriyel = 60 × 2 = 120.
Güncelleme: sayı-- → 1. Koşul sona yaklaşır.
Koşul: 1 > 1 → false → döngüden çıkılır.
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ı.
Döngüler · Kodu adım adım çalıştır
Kod İzleme: do-while menüsü (girdi 1, 2, 0)
Klavyeden okumak için Scanner (dosya başında import java.util.Scanner;). Kullanıcı sırayla 1, 2, 0 yazacak.
seçim bildirildi ama değeri yok; koşul ilk kez gövdeden sonra sorulacağı için sorun olmaz.
1. tur: koşula bakmadan gövdeye girilir, menü yazılır.
Kullanıcı 1 yazar → seçim = 1.
seçim == 1 → true: «Merhaba!» yazılır.
Koşul: 1 != 0 → true → başa dön.
2. tur: koşula bakmadan gövdeye girilir, menü yazılır.
Kullanıcı 2 yazar → seçim = 2.
seçim == 1 → false: hiçbir şey yapılmaz.
Koşul: 2 != 0 → true → başa dön.
3. tur: koşula bakmadan gövdeye girilir, menü yazılır.
Kullanıcı 0 yazar → seçim = 0.
seçim == 1 → false: hiçbir şey yapılmaz.
Koşul: 0 != 0 → false → döngü biter.
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
| Durum | Tercih |
|---|---|
| 1’den n’ye say, n kez tekrarla | for |
| Sayı 0 olana kadar basamak işle | while |
| Menü göster, geçerli girdi gelene kadar sor | do-while |
| Kullanıcı “0” yazana kadar topla | while / do-while |
Üçü de birbirine çevrilebilir; seçim okunabilirlik içindir.
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.
Dallanma · Kodu adım adım çalıştır
Kod İzleme: break ve continue
i = 1: 1 % 3 = 1 → false; 1 == 8 → false. İki kontrol de geçildi.
1 yazılır.
i = 2: 2 % 3 = 2 → false; 2 == 8 → false. İki kontrol de geçildi.
2 yazılır.
i = 3: 3 % 3 == 0 → true → continue: print atlanır, doğrudan i++.
i = 4: 4 % 3 = 1 → false; 4 == 8 → false. İki kontrol de geçildi.
4 yazılır.
i = 5: 5 % 3 = 2 → false; 5 == 8 → false. İki kontrol de geçildi.
5 yazılır.
i = 6: 6 % 3 == 0 → true → continue: print atlanır, doğrudan i++.
i = 7: 7 % 3 = 1 → false; 7 == 8 → false. İki kontrol de geçildi.
7 yazılır.
i = 8: 8 % 3 = 2 → false; 8 == 8 → true → break: döngü burada biter, 9 ve 10’a hiç gelinmez.
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ü
- 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 birbreakkoş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.
Başlangıçta hiçbir sayı işlenmedi: toplam = 0 (boş toplam). Değişmez baştan doğru.
i = 2 turunun başında toplam, 1 … 1 sayılarının toplamı: 1.
i = 3 turunun başında toplam, 1 … 2 sayılarının toplamı: 3.
i = 4 turunun başında toplam, 1 … 3 sayılarının toplamı: 6.
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)
<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
/ 10son 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,
-2147483648gibi 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)
Negatif bir sayıyla deneyelim: sayı = −507.
int değer long’a kopyalanır (−2147483648’in tersi int’e sığmaz, long’a sığar).
−507 < 0 → true → kalan = 507. İşaret basamak sayısını değiştirmez.
Sayaç basamak = 0.
Gövde: bir basamak sayıldı → basamak = 1.
kalan = 507 / 10 = 50 (tam sayı bölmesi son basamağı atar).
Koşul: 50 > 0 → true → tekrar.
Gövde: bir basamak sayıldı → basamak = 2.
kalan = 50 / 10 = 5 (tam sayı bölmesi son basamağı atar).
Koşul: 5 > 0 → true → tekrar.
Gövde: bir basamak sayıldı → basamak = 3.
kalan = 5 / 10 = 0 (tam sayı bölmesi son basamağı atar).
Koşul: 0 > 0 → false → bitti.
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);
% 10son rakamı verir./ 10iş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)
Rakamları 7, 2 ve 5 olan sayı: 725.
Üzerinde çalışmak için kopya: kalan = 725.
725 < 0 → false: işaret değişmez.
Biriktirici toplam = 0.
Koşul: 725 > 0 → true.
Son rakam 725 % 10 = 5; toplam = 0 + 5 = 5.
kalan = 725 / 10 = 72: işlenen rakam atıldı.
Koşul: 72 > 0 → true.
Son rakam 72 % 10 = 2; toplam = 5 + 2 = 7.
kalan = 72 / 10 = 7: işlenen rakam atıldı.
Koşul: 7 > 0 → true.
Son rakam 7 % 10 = 7; toplam = 7 + 7 = 14.
kalan = 7 / 10 = 0: işlenen rakam atıldı.
Koşul: 0 > 0 → false.
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⁴
2⁴ hesaplanacak: taban = 2, üs = 4.
Çarpımın etkisiz elemanı 1: sonuç = 1 (= 2⁰).
Başlangıç: i = 0. Döngü üs kez (0, 1, 2, 3) dönecek.
Koşul: 0 < 4 → true.
sonuç = 1 × 2 = 2 (= 21).
Güncelleme: i = 1.
Koşul: 1 < 4 → true.
sonuç = 2 × 2 = 4 (= 22).
Güncelleme: i = 2.
Koşul: 2 < 4 → true.
sonuç = 4 × 2 = 8 (= 23).
Güncelleme: i = 3.
Koşul: 3 < 4 → true.
sonuç = 8 × 2 = 16 (= 24).
Güncelleme: i = 4.
Koşul: 4 < 4 → false.
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ı?
n = 29 asal mı?
29 >= 2 → true. Aksi kanıtlanana kadar asal kabul ediyoruz.
Başlangıç: ilk bölen adayı i = 2.
Koşul: true && 2 <= 29/2 = 14 → true.
29 % 2 = 1 → bölmüyor.
Güncelleme: i = 3.
Koşul: true && 3 <= 29/3 = 9 → true.
29 % 3 = 2 → bölmüyor.
Güncelleme: i = 4.
Koşul: true && 4 <= 29/4 = 7 → true.
29 % 4 = 1 → bölmüyor.
Güncelleme: i = 5.
Koşul: true && 5 <= 29/5 = 5 → true.
29 % 5 = 4 → bölmüyor.
Güncelleme: i = 6.
Koşul: true && 6 <= 29/6 = 4 → false: √29’i geçtik, daha büyük bölen aramaya gerek yok.
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ı?
n = 21 asal mı?
21 >= 2 → true. Aksi kanıtlanana kadar asal kabul ediyoruz.
Başlangıç: ilk bölen adayı i = 2.
Koşul: true && 2 <= 21/2 = 10 → true.
21 % 2 = 1 → bölmüyor.
Güncelleme: i = 3.
Koşul: true && 3 <= 21/3 = 7 → true.
21 % 3 = 0 → bölen bulundu: asal = false.
Güncelleme: i = 4.
Koşul: asal = false → && kısa devre yapar, i <= n / i hiç hesaplanmaz → döngü biter.
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ı
İlk 5 Fibonacci sayısı yazılacak.
Serinin ilk iki terimi: a = 0, b = 1.
i = 0 < 5 → true. Sıradaki terim a = 0 yazılır.
sonraki = 0 + 1 = 1.
Kaydırma: a = 1, b = 1. Sıra önemli: önce a = b, sonra b = sonraki. Sonra i++.
i = 1 < 5 → true. Sıradaki terim a = 1 yazılır.
sonraki = 1 + 1 = 2.
Kaydırma: a = 1, b = 2. Sıra önemli: önce a = b, sonra b = sonraki. Sonra i++.
i = 2 < 5 → true. Sıradaki terim a = 1 yazılır.
sonraki = 1 + 2 = 3.
Kaydırma: a = 2, b = 3. Sıra önemli: önce a = b, sonra b = sonraki. Sonra i++.
i = 3 < 5 → true. Sıradaki terim a = 2 yazılır.
sonraki = 2 + 3 = 5.
Kaydırma: a = 3, b = 5. Sıra önemli: önce a = b, sonra b = sonraki. Sonra i++.
i = 4 < 5 → true. Sıradaki terim a = 3 yazılır.
sonraki = 3 + 5 = 8.
Kaydırma: a = 5, b = 8. Sıra önemli: önce a = b, sonra b = sonraki. Sonra i++.
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(); }
- İç 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
Dış döngü satır = 0; iç döngü sütun = 0’dan başlar → (0,0).
sütun++ → 1 < 4 → true → (0,1) yazılır.
sütun++ → 2 < 4 → true → (0,2) yazılır.
sütun++ → 3 < 4 → true → (0,3) yazılır.
sütun = 4 < 4 → false: iç döngü bitti. println satırı sonlandırır.
satır++ → satır = 1; iç döngü yeniden sütun = 0’dan başlar.
sütun++ → 1 < 4 → true → (1,1) yazılır.
sütun++ → 2 < 4 → true → (1,2) yazılır.
sütun++ → 3 < 4 → true → (1,3) yazılır.
sütun = 4 < 4 → false: iç döngü bitti. println satırı sonlandırır.
satır++ → satır = 2; iç döngü yeniden sütun = 0’dan başlar.
sütun++ → 1 < 4 → true → (2,1) yazılır.
sütun++ → 2 < 4 → true → (2,2) yazılır.
sütun++ → 3 < 4 → true → (2,3) yazılır.
sütun = 4 < 4 → false: iç döngü bitti. println satırı sonlandırır.
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
- Beklenen çıktıyı küçük bir n (ör. 4) için kareli kâğıda çizin.
- Her satırda kaç boşluk ve kaç karakter olduğunu tabloya dökün.
- Sayıları satır numarasıyla ilişkilendirin (3, 2, 1, 0 → n − satır).
- Dış döngü = satır; her parça için bir iç döngü.
Ö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)
n = 4 satırlık üçgen. Izgarada her hücre bir karakter.
satır = 1: iç döngü sütun = 1 … 1 → bu satıra 1 yıldız.
sütun = 2 <= 1 → false. println ile alt satıra geçilir.
satır = 2: iç döngü sütun = 1 … 2 → bu satıra 2 yıldız.
sütun = 2 <= 2 → true → *
sütun = 3 <= 2 → false. println ile alt satıra geçilir.
satır = 3: iç döngü sütun = 1 … 3 → bu satıra 3 yıldız.
sütun = 2 <= 3 → true → *
sütun = 3 <= 3 → true → *
sütun = 4 <= 3 → false. println ile alt satıra geçilir.
satır = 4: iç döngü sütun = 1 … 4 → bu satıra 4 yıldız.
sütun = 2 <= 4 → true → *
sütun = 3 <= 4 → true → *
sütun = 4 <= 4 → true → *
sütun = 5 <= 4 → false. println ile alt satıra geçilir.
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)
n = 3. Her satır: önce n − satır boşluk, sonra satır yıldız.
satır = 1: 2 boşluk gerekiyor. boşluk = 0 → ' ' yazılır.
boşluk = 1 < 2 → ' ' yazılır.
Boşluklar bitti; 1 yıldız: yıldız = 0 → *
Satır tamam (her satır n = 3 karakter): println.
satır = 2: 1 boşluk gerekiyor. boşluk = 0 → ' ' yazılır.
Boşluklar bitti; 2 yıldız: yıldız = 0 → *
yıldız = 1 < 2 → *
Satır tamam (her satır n = 3 karakter): println.
satır = 3: boşluk < 3 − 3 = 0 → false: bu satırda hiç boşluk yok.
Boşluklar bitti; 3 yıldız: yıldız = 0 → *
yıldız = 1 < 3 → *
yıldız = 2 < 3 → *
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
| Desen | Boşluk | Karakter |
|---|---|---|
| Artan üçgen | 0 | satır |
| Azalan üçgen | 0 | n - satır + 1 |
| Sağa yaslı | n - satır | satır |
| Piramit | n - satır | 2 × 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)
Her hücreye bir değer + " " (sayı ve boşluk) yazılır.
satır = 1: değer 1’den 1’e kadar. değer = 1 → “1 ”
değer = 2 <= 1 → false; println.
satır = 2: değer 1’den 2’e kadar. değer = 1 → “1 ”
değer = 2 → “2 ” (yazılan sayı iç döngü değişkeni).
değer = 3 <= 2 → false; println.
satır = 3: değer 1’den 3’e kadar. değer = 1 → “1 ”
değer = 2 → “2 ” (yazılan sayı iç döngü değişkeni).
değer = 3 → “3 ” (yazılan sayı iç döngü değişkeni).
değer = 4 <= 3 → false; println.
satır = 4: değer 1’den 4’e kadar. değer = 1 → “1 ”
değer = 2 → “2 ” (yazılan sayı iç döngü değişkeni).
değer = 3 → “3 ” (yazılan sayı iç döngü değişkeni).
değer = 4 → “4 ” (yazılan sayı iç döngü değişkeni).
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)
n = 4. Kenar: ilk/son satır (i = 0, 3) veya ilk/son sütun (j = 0, 3).
i = 0, j = 0: i == 0 → true → *
i = 0, j = 1: i == 0 → true → *
i = 0, j = 2: i == 0 → true → *
i = 0, j = 3: i == 0 → true → *
j = 4 < 4 → false; println.
i = 1, j = 0: j == 0 → true → *
i = 1, j = 1: dört koşulun hepsi false → else → boşluk
i = 1, j = 2: dört koşulun hepsi false → else → boşluk
i = 1, j = 3: j == 3 → true → *
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
i = 2, j = 0: j == 0 → true → *
i = 2, j = 1: dört koşulun hepsi false → else → boşluk
i = 2, j = 2: dört koşulun hepsi false → else → boşluk
i = 2, j = 3: j == 3 → true → *
j = 4 < 4 → false; println.
i = 3, j = 0: i == 3 → true → *
i = 3, j = 1: i == 3 → true → *
i = 3, j = 2: i == 3 → true → *
i = 3, j = 3: i == 3 → true → *
j = 4 < 4 → false; println.
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.
Ö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ı testi | sayı | beklenen |
|---|---|---|
| Normal | 4096 | 4 |
| Sıfır | 0 | 1 |
| Negatif | −507 | 3 |
| Uç değer | −2147483648 | 10 |
Ö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ı
- while ve do-while arasındaki temel fark nedir?
- break ile continue ne yapar?
- Rakamlar toplamında % 10 ve / 10 ne işe yarar?
- Artan üçgende iç döngünün üst sınırı neden satır değişkenidir?
- println iç döngüye yazılırsa çıktı nasıl değişir?
Son
← → veya boşluk ile gezinin · F: tam ekran · Home/End: ilk/son slayt