Bölüm 8: 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
- İlk değer verme: 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);
ilk değer vermekoşulgövdegüncelleme
- Tekrar sayısı belli olduğunda for uygundur; dört parça tek satırda toplanır.
- Sıra: ilk değer verme → 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).
İlk değer verme: 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
for Döngüsünün Esnek Biçimleri
| Başlık | Çalışma |
|---|---|
for (int i = 0, j = 9; i < j; i++, j--) | i ve j birlikte: (0,9) … (4,5), 5 tur |
for (int i = 0; i <= 10; i += 2) | 0 2 4 6 8 10 |
for (int i = 5; i >= 1; i--) | geri sayım: 5 4 3 2 1 |
int k = 0; for (;;) { // üç bölüm de boş: koşul true sayılır k++; if (k == 3) break; // çıkış koşulu şart } System.out.println(k); // 3
- İlk değer verme, koşul ve güncelleme bölümlerinin her biri isteğe bağlıdır.
- İlk değer verme bölümünde aynı tipte birden çok değişken, güncellemede virgülle birden çok ifade yazılabilir.
Döngüler
++i ile i++ Farkı
for (int i = 0; i < 3; i++) System.out.print(i + " "); // 0 1 2 for (int i = 0; i < 3; ++i) System.out.print(i + " "); // 0 1 2
for’un güncelleme bölümünde ifadenin değeri kullanılmaz; ikisi de yalnızca i’yi 1 artırır, fark yoktur.
| Başlangıç | İfade | sonuç | sonra |
|---|---|---|---|
a = 5 | b = a++ | b = 5 | a = 6 |
a = 5 | b = ++a | b = 6 | a = 6 |
idx = 0 | d[idx++] | 10 | idx = 1 |
idx = 0 | d[++idx] | 20 | idx = 1 |
i++önce eski değeri verir, sonra artırır;++iönce artırır, sonra yeni değeri verir.- Tabloda
d = {10, 20, 30}; fark yalnızca değer kullanıldığında ortaya çıkar. Okunabilirlik için sayaçtai++yazın.
Döngüler
while Döngüsü
int sayi = 5; int faktoriyel = 1; while (sayi > 1) { faktoriyel *= sayi; sayi--; } System.out.println(faktoriyel);
ilk değer vermekoşulgövdegüncelleme
- Koşul gövdeden önce kontrol edilir.
- Başlangıçta false ise gövde hiç çalışmaz.
- İlk değer verme 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!
İlk değer verme: sayi = 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.
faktoriyel = 1 × 5 = 5.
Güncelleme: sayi-- → 4. Koşul sona yaklaşır.
Koşul: 4 > 1 → true → gövde çalışır.
faktoriyel = 5 × 4 = 20.
Güncelleme: sayi-- → 3. Koşul sona yaklaşır.
Koşul: 3 > 1 → true → gövde çalışır.
faktoriyel = 20 × 3 = 60.
Güncelleme: sayi-- → 2. Koşul sona yaklaşır.
Koşul: 2 > 1 → true → gövde çalışır.
faktoriyel = 60 × 2 = 120.
Güncelleme: sayi-- → 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 sayi = 5; int faktoriyel = 1; while (sayi > 1) { faktoriyel *= sayi; sayi--; } System.out.println(faktoriyel);
Döngüler
do-while Döngüsü
Scanner klavye = new Scanner(System.in); int secim; do { System.out.print("Seçim (1/0): "); secim = klavye.nextInt(); if (secim == 1) System.out.println("Merhaba!"); } while (secim != 0); System.out.println("Güle güle");
ilk değer vermekoş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.
secim 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 → secim = 1.
secim == 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 → secim = 2.
secim == 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 → secim = 0.
secim == 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 secim; do { System.out.print("Seçim (1/0): "); secim = klavye.nextInt(); if (secim == 1) System.out.println("Merhaba!"); } while (secim != 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");
Dallanma · Kodu adım adım çalıştır
Etiketli break dis: iki döngüden birden çık
i = 1, j = 1: 1·1 = 1 ≠ 4, 1 1 yazılır.
j = 2: 1·2 = 2 ≠ 4 → 1 2 yazılır.
j = 3: 1·3 = 3 ≠ 4 → 1 3 yazılır; iç döngü biter.
i = 2; iç döngü yeniden başlar: j = 1, 2·1 = 2 ≠ 4 → 2 1 yazılır.
i = 2, j = 2: 2·2 = 4 → break dis. Yazdırmadan her iki döngüden birden çıkılır; i = 3 hiç denenmez.
Etiketli break dış döngünün ardındaki satıra atlar: bitti yazılır. Çıktı: 4 sayı satırı + bitti.
dis: for (int i = 1; i <= 3; i++) { for (int j = 1; j <= 3; j++) { if (i * j == 4) break dis; System.out.println(i + " " + j); } } System.out.println("bitti");
Dallanma · Kodu adım adım çalıştır
Karşılaştırma: düz break yalnızca iç döngüyü bitirir
i = 1: j = 1, 2, 3 için 1·j ≠ 4; 1 1, 1 2, 1 3 yazılır.
i = 2, j = 1: 2·1 = 2 ≠ 4 → 2 1 yazılır.
i = 2, j = 2: 2·2 = 4 → düz break yalnızca iç döngüyü bitirir; dış döngü devam eder.
i++ → 3; iç döngü yeniden başlar: j = 1 → 3 1 yazılır.
j = 2 ve j = 3: 3·2 = 6, 3·3 = 9 ≠ 4 → 3 2 ve 3 3 yazılır.
Dış döngü de biter, bitti yazılır. Düz break ile 7 sayı satırı, etiketli break ile 4 sayı satırı çıktı.
for (int i = 1; i <= 3; i++) { for (int j = 1; j <= 3; j++) { if (i * j == 4) break; System.out.println(i + " " + j); } } 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.
- Not:
i--ileintsınırı aşılırsa değer sarar ve döngü yaklaşık 2,1 milyar turdan sonra biter; pratikte sonsuz sayılı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.
Döngüler · Kodu adım adım çalıştır
double Sayaç Tuzağı: x += 0.1
Başlangıç: n = 0. Amaç 0,1’er artıp 10 tur dönmek.
x = 0.0, koşul 0.0 < 1.0 → true.
Gövde: n = 1.
Güncelleme: x = 0.1. 0,1 ikili tabanda tam gösterilemez; küçük hatalar birikir.
10. turun sonu (arada 8 tur atlandı): n = 10, x = 0.8999999999999999.
Güncelleme: x = 0.9999999999999999, tam 1.0 değil. Koşul true: döngü bir tur fazla döner.
11. tur: n = 11.
x = 1.0999999999999999, koşul false → döngü biter.
11 yazılır; beklenen 10 idi.
int n = 0; for (double x = 0; x < 1.0; x += 0.1) { n++; } System.out.println(n);
x != 1.0 yazılsaydı x hiçbir zaman tam 1.0 olmayacağından döngü bitmezdi. Gerçek sayılarda sayaç yerine int kullanın.
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.
Doğrulama · Kodu adım adım çalıştır
Sınır Hatası Denetimi: i < 5 → 5 tur
Başlangıç: i = 0, sayac = 0. Koşul 0 < 5 → true.
Tur 1: i = 0 yazılır, sayac = 1 olur.
Tur 2: i = 1 yazılır, sayac = 2 olur.
Tur 3: i = 2 yazılır, sayac = 3 olur.
Tur 4: i = 3 yazılır, sayac = 4 olur.
Tur 5: i = 4 yazılır, sayac = 5 olur.
i++ → 5; 5 < 5 → false, döngü biter. Tam 5 tur: i = 0…4.
int sayac = 0; for (int i = 0; i < 5; i++) { System.out.print(i + " "); sayac++; } System.out.println("| tur: " + sayac);
Doğrulama · Kodu adım adım çalıştır
Sınır Hatası: i <= 5 → 6 tur
Başlangıç: i = 0, sayac = 0. Koşul 0 <= 5 → true.
Tur 1: i = 0 yazılır, sayac = 1 olur.
Tur 2: i = 1 yazılır, sayac = 2 olur.
Tur 3: i = 2 yazılır, sayac = 3 olur.
Tur 4: i = 3 yazılır, sayac = 4 olur.
Tur 5: i = 4 yazılır, sayac = 5 olur.
Tur 6: i = 5 yazılır, sayac = 6 olur.
i++ → 6; 6 <= 5 → false. <= yüzünden fazladan bir tur döndü: sayac = 6, beklenen 5 değil.
int sayac = 0; for (int i = 0; i <= 5; i++) { System.out.print(i + " "); sayac++; } System.out.println("| tur: " + sayac);
Örnek
Basamak Sayısı
int sayi = -507; long kalan = sayi; 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ı (sayi = −507)
Negatif bir sayıyla deneyelim: sayi = −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. sayi = 0 olsaydı do-while gövdeyi yine bir kez çalıştırır → 1 basamak (doğru).
int sayi = -507; long kalan = sayi; if (kalan < 0) kalan = -kalan; int basamak = 0; do { basamak++; kalan /= 10; } while (kalan > 0); System.out.println(basamak);
Örnek
Rakamlar Toplamı
int sayi = 725; long kalan = sayi; 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ı (sayi = 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. sayi değişmedi, yalnızca kopyası (kalan) tüketildi.
int sayi = 725; long kalan = sayi; if (kalan < 0) kalan = -kalan; int toplam = 0; while (kalan > 0) { toplam += (int) (kalan % 10); kalan /= 10; } System.out.println(toplam);
Örnekler · Kodu adım adım çalıştır
Sayıyı Ters Çevirme ve Palindrom (1221)
Rakamları tersten okununca da aynı kalan sayıya palindrom denir. Deneyelim: 1221.
Kopya üzerinde çalışılır; ters sayı 0’dan kurulacak.
Koşul: 1221 > 0 → true.
rakam = 1221 % 10 = 1; ters = 0 × 10 + 1 = 1 (eski rakamlar bir basamak sola kayar).
kalan = 1221 / 10 = 122.
Koşul: 122 > 0 → true.
rakam = 122 % 10 = 2; ters = 1 × 10 + 2 = 12 (eski rakamlar bir basamak sola kayar).
kalan = 122 / 10 = 12.
Koşul: 12 > 0 → true.
rakam = 12 % 10 = 2; ters = 12 × 10 + 2 = 122 (eski rakamlar bir basamak sola kayar).
kalan = 12 / 10 = 1.
Koşul: 1 > 0 → true.
rakam = 1 % 10 = 1; ters = 122 × 10 + 1 = 1221 (eski rakamlar bir basamak sola kayar).
kalan = 1 / 10 = 0.
Koşul: 0 > 0 → false.
Ters sayı 1221 yazılır.
1221 == 1221 → true: 1221 bir palindromdur. (123 için ters 321 olur → false.)
int sayi = 1221; int kalan = sayi, ters = 0; while (kalan > 0) { int rakam = kalan % 10; ters = ters * 10 + rakam; kalan /= 10; } System.out.println(ters); System.out.println(ters == sayi); // palindrom mu?
Örnekler · Kodu adım adım çalıştır
Armstrong Sayısı: 153 = 1³ + 5³ + 3³
Armstrong sayısı: rakamlarının (basamak sayısı kadar) kuvvetleri toplamı kendisine eşit. 153 üç basamaklı → küpler.
kalan = 153, toplam = 0.
Koşul: 153 > 0 → true.
r = 3; toplam = 0 + 3×3×3 = 27.
kalan /= 10 → 15.
Koşul: 15 > 0 → true.
r = 5; toplam = 27 + 5×5×5 = 152.
kalan /= 10 → 1.
Koşul: 1 > 0 → true.
r = 1; toplam = 152 + 1×1×1 = 153.
kalan /= 10 → 0.
Koşul: 0 > 0 → false.
1 + 125 + 27 = 153 → true. Diğer 3 basamaklı Armstrong sayıları: 370, 371, 407.
int sayi = 153; int kalan = sayi, toplam = 0; while (kalan > 0) { int r = kalan % 10; toplam += r * r * r; // 3 basamak: küp kalan /= 10; } System.out.println(toplam == sayi);
Örnekler · Kodu adım adım çalıştır
Mükemmel Sayı: 28
Mükemmel sayı: kendisi hariç bölenlerinin toplamı kendisine eşit (6 = 1 + 2 + 3). 28’i deneyelim.
Bölenler toplamı 0’dan başlar. n’nin kendisi hariç en büyük böleni en fazla n / 2 = 14.
i = 1: 28 % 1 = 0 → bölen, toplam = 1.
i = 2: 28 % 2 = 0 → bölen, toplam = 3.
i = 3: 28 % 3 = 1 → bölmüyor.
i = 4: 28 % 4 = 0 → bölen, toplam = 7.
i = 5: 28 % 5 = 3 → bölmüyor.
i = 6: 28 % 6 = 4 → bölmüyor.
i = 7: 28 % 7 = 0 → bölen, toplam = 14.
i = 8: 28 % 8 = 4 → bölmüyor.
i = 9: 28 % 9 = 1 → bölmüyor.
i = 10: 28 % 10 = 8 → bölmüyor.
i = 11: 28 % 11 = 6 → bölmüyor.
i = 12: 28 % 12 = 4 → bölmüyor.
i = 13: 28 % 13 = 2 → bölmüyor.
i = 14: 28 % 14 = 0 → bölen, toplam = 28.
i = 15 <= 14 → false: döngü biter.
1 + 2 + 4 + 7 + 14 = 28 → true. Sonraki mükemmel sayılar: 496, 8128.
int n = 28; int toplam = 0; for (int i = 1; i <= n / 2; i++) { if (n % i == 0) toplam += i; } System.out.println(toplam == n);
Örnekler · Kodu adım adım çalıştır
Onluktan İkiliye Çevirme: 13 → 1101
13’ü ikiliye çevireceğiz: sürekli 2’ye bölüp kalanları topluyoruz.
ikili sonucu ondalık rakamlarla (1 ve 0) kuracağız; basamak = 1 birler basamağı.
Koşul: 13 > 0 → true.
13 % 2 = 1 → ikili += 1 × 1 → 1.
Sonraki bit bir basamak solda: basamak = 10; n = n / 2 = 6.
Koşul: 6 > 0 → true.
6 % 2 = 0 → ikili += 0 × 10 → 1.
Sonraki bit bir basamak solda: basamak = 100; n = n / 2 = 3.
Koşul: 3 > 0 → true.
3 % 2 = 1 → ikili += 1 × 100 → 101.
Sonraki bit bir basamak solda: basamak = 1000; n = n / 2 = 1.
Koşul: 1 > 0 → true.
1 % 2 = 1 → ikili += 1 × 1000 → 1101.
Sonraki bit bir basamak solda: basamak = 10000; n = n / 2 = 0.
Koşul: 0 > 0 → false.
1101 yazılır: 1·8 + 1·4 + 0·2 + 1·1 = 13. (Büyük sayılarda int taşar; sonuç String ile kurulabilir.)
int n = 13; int ikili = 0, basamak = 1; while (n > 0) { ikili += (n % 2) * basamak; basamak *= 10; n /= 2; } System.out.println(ikili); // 1101
Örnek
Üs Alma
int taban = 2, us = 4; int sonuc = 1; for (int i = 0; i < us; i++) { sonuc *= taban; } System.out.println(sonuc);
- Döngü tam üs kez çalışır; her tur bir kez tabanla çarpar.
- us = 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, us = 4.
Çarpımın etkisiz elemanı 1: sonuc = 1 (= 2⁰).
İlk değer verme: i = 0. Döngü üs kez (0, 1, 2, 3) dönecek.
Koşul: 0 < 4 → true.
sonuc = 1 × 2 = 2 (= 21).
Güncelleme: i = 1.
Koşul: 1 < 4 → true.
sonuc = 2 × 2 = 4 (= 22).
Güncelleme: i = 2.
Koşul: 2 < 4 → true.
sonuc = 4 × 2 = 8 (= 23).
Güncelleme: i = 3.
Koşul: 3 < 4 → true.
sonuc = 8 × 2 = 16 (= 24).
Güncelleme: i = 4.
Koşul: 4 < 4 → false.
16 yazılır. Değişmez: her turun başında sonuc = 2i.
int taban = 2, us = 4; int sonuc = 1; for (int i = 0; i < us; i++) { sonuc *= taban; } System.out.println(sonuc);
Ö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);
Örnekler · Kodu adım adım çalıştır
1’den n’ye Asal Sayıları Listeleme (n = 20)
2’den 20’ye her k için asal testi (iç döngü) yapılır.
k = 2: iç döngü hiç çalışmaz (2 > k / 2) → asal = true → yazılır.
k = 3: iç döngü hiç çalışmaz (2 > k / 2) → asal = true → yazılır.
k = 4: 4 % 2 = 0 → asal = false, break (iç döngü erken biter).
k = 5: 2 … 2 arasında bölen yok → asal = true → yazılır.
k = 6: 6 % 2 = 0 → asal = false, break (iç döngü erken biter).
k = 7: 2 … 2 arasında bölen yok → asal = true → yazılır.
k = 8: 8 % 2 = 0 → asal = false, break (iç döngü erken biter).
k = 9: 9 % 3 = 0 → asal = false, break (iç döngü erken biter).
k = 10: 10 % 2 = 0 → asal = false, break (iç döngü erken biter).
k = 11: 2 … 3 arasında bölen yok → asal = true → yazılır.
k = 12: 12 % 2 = 0 → asal = false, break (iç döngü erken biter).
k = 13: 2 … 3 arasında bölen yok → asal = true → yazılır.
k = 14: 14 % 2 = 0 → asal = false, break (iç döngü erken biter).
k = 15: 15 % 3 = 0 → asal = false, break (iç döngü erken biter).
k = 16: 16 % 2 = 0 → asal = false, break (iç döngü erken biter).
k = 17: 2 … 4 arasında bölen yok → asal = true → yazılır.
k = 18: 18 % 2 = 0 → asal = false, break (iç döngü erken biter).
k = 19: 2 … 4 arasında bölen yok → asal = true → yazılır.
k = 20: 20 % 2 = 0 → asal = false, break (iç döngü erken biter).
k = 21 > 20: bitti. 2..20 arasında 8 asal var. (Eratosthenes eleği daha hızlıdır.)
int n = 20; for (int k = 2; k <= n; k++) { boolean asal = true; for (int i = 2; i <= k / i; i++) { if (k % i == 0) { asal = false; break; } } if (asal) System.out.print(k + " "); }
Örnek
Fibonacci Dizisi
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. - Dizi 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.
Dizinin 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; }
Örnekler · Kodu adım adım çalıştır
Sayı Tahmin Oyunu (while + Random + Scanner)
Random rastgele sayı üretir (dosya başında import java.util.Random; ve java.util.Scanner).
Klavyeden okumak için Scanner.
nextInt(100) 0..99 verir, +1 ile 1..100. Bu çalıştırmada hedef = 37 çıktı (her çalıştırmada farklı).
tahmin = 0 hiçbir zaman hedef olamaz → döngüye kesin girilir.
Koşul: 0 != 37 → true.
Kullanıcı 50 yazar; deneme = 1.
50 > 37 → «Aşağı». Olası aralık 1..49. Her seferinde ortayı söylemek aralığı yarıya indirir.
Koşul: 50 != 37 → true.
Kullanıcı 25 yazar; deneme = 2.
25 < 37 → «Yukarı». Olası aralık 26..49.
Koşul: 25 != 37 → true.
Kullanıcı 37 yazar; deneme = 3.
37 ne küçük ne büyük: iki if de false, ileti yok.
Koşul: 37 != 37 → false → döngü biter.
Kaç tur süreceği baştan belli değil → while doğru seçim.
Random rnd = new Random(); Scanner klavye = new Scanner(System.in); int hedef = rnd.nextInt(100) + 1; // 1..100 int tahmin = 0, deneme = 0; while (tahmin != hedef) { tahmin = klavye.nextInt(); deneme++; if (tahmin < hedef) System.out.println("Yukarı"); if (tahmin > hedef) System.out.println("Aşağı"); } System.out.println(deneme + ". denemede bildin");
Örnekler · Kodu adım adım çalıştır
Bekçi Değer: while (true) + break, girdi 5, 3, 0
Girdi kuyruğu (klavyeden girilecek sayılar): 5, 3, 0. Koşul true olduğundan döngü kendiliğinden bitmez; çıkış break ile sağlanır.
nextInt() kuyruktan 5 okur. 5 == 0 → false, break çalışmaz.
toplam = 0 + 5 = 5. Döngü başa döner (true).
nextInt() → 3. 3 == 0 → false.
toplam = 5 + 3 = 8.
nextInt() → 0 (bekçi değer). 0 == 0 → true → break: döngüden çıkılır; 0 toplama eklenmez.
Toplam: 8 yazılır. Bekçi değer (sentinel) veri sonunu işaretler; kendisi veriye katılmaz.
Scanner sc = new Scanner(System.in); int toplam = 0; while (true) { int sayi = sc.nextInt(); if (sayi == 0) break; toplam += sayi; } System.out.println("Toplam: " + toplam);
Döngüler
İç İçe Döngü
for (int satir = 0; satir < 3; satir++) { for (int sutun = 0; sutun < 4; sutun++) { System.out.printf("(%d,%d) ", satir, sutun); } System.out.println(); }
- İç döngü, dış döngünün her turunda baştan sona tamamlanır.
- Gövde satır × sutun = 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ü satir = 0; iç döngü sutun = 0’dan başlar → (0,0).
sutun++ → 1 < 4 → true → (0,1) yazılır.
sutun++ → 2 < 4 → true → (0,2) yazılır.
sutun++ → 3 < 4 → true → (0,3) yazılır.
sutun = 4 < 4 → false: iç döngü bitti. println satırı sonlandırır.
satir++ → satir = 1; iç döngü yeniden sutun = 0’dan başlar.
sutun++ → 1 < 4 → true → (1,1) yazılır.
sutun++ → 2 < 4 → true → (1,2) yazılır.
sutun++ → 3 < 4 → true → (1,3) yazılır.
sutun = 4 < 4 → false: iç döngü bitti. println satırı sonlandırır.
satir++ → satir = 2; iç döngü yeniden sutun = 0’dan başlar.
sutun++ → 1 < 4 → true → (2,1) yazılır.
sutun++ → 2 < 4 → true → (2,2) yazılır.
sutun++ → 3 < 4 → true → (2,3) yazılır.
sutun = 4 < 4 → false: iç döngü bitti. println satırı sonlandırır.
satir = 3 < 3 → false: dış döngü de bitti. Toplam 3 × 4 = 12 printf.
for (int satir = 0; satir < 3; satir++) { for (int sutun = 0; sutun < 4; sutun++) { System.out.printf("(%d,%d) ", satir, sutun); } System.out.println(); }
Döngüler · Kodu adım adım çalıştır
Çarpım Tablosu (iç içe döngü, 3 × 3)
Dış döngü i = 1; iç döngü j = 1’den başlar: 1 × 1 = 1.
j = 2: 1 × 2 = 2, 4 karakterlik alana sağa yaslı yazılır.
j = 3: 1 × 3 = 3, 4 karakterlik alana sağa yaslı yazılır.
j = 4 <= 3 → false; println ile satır biter.
Dış döngü i = 2; iç döngü j = 1’den başlar: 2 × 1 = 2.
j = 2: 2 × 2 = 4, 4 karakterlik alana sağa yaslı yazılır.
j = 3: 2 × 3 = 6, 4 karakterlik alana sağa yaslı yazılır.
j = 4 <= 3 → false; println ile satır biter.
Dış döngü i = 3; iç döngü j = 1’den başlar: 3 × 1 = 3.
j = 2: 3 × 2 = 6, 4 karakterlik alana sağa yaslı yazılır.
j = 3: 3 × 3 = 9, 4 karakterlik alana sağa yaslı yazılır.
j = 4 <= 3 → false; println ile satır biter.
i = 4 <= 3 → false. Sınırları 10 yapınca klasik 10 × 10 çarpım tablosu çıkar.
for (int i = 1; i <= 3; i++) { for (int j = 1; j <= 3; j++) { System.out.printf("%4d", i * j); } 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 satir = 1; satir <= n; satir++) {
for (int sutun = 1; sutun <= satir; sutun++) {
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.
satir = 1: iç döngü sutun = 1 … 1 → bu satıra 1 yıldız.
sutun = 2 <= 1 → false. println ile alt satıra geçilir.
satir = 2: iç döngü sutun = 1 … 2 → bu satıra 2 yıldız.
sutun = 2 <= 2 → true → *
sutun = 3 <= 2 → false. println ile alt satıra geçilir.
satir = 3: iç döngü sutun = 1 … 3 → bu satıra 3 yıldız.
sutun = 2 <= 3 → true → *
sutun = 3 <= 3 → true → *
sutun = 4 <= 3 → false. println ile alt satıra geçilir.
satir = 4: iç döngü sutun = 1 … 4 → bu satıra 4 yıldız.
sutun = 2 <= 4 → true → *
sutun = 3 <= 4 → true → *
sutun = 4 <= 4 → true → *
sutun = 5 <= 4 → false. println ile alt satıra geçilir.
satir = 5 <= 4 → false: bitti. Toplam 1 + 2 + 3 + 4 = 10 yıldız.
int n = 4; for (int satir = 1; satir <= n; satir++) { for (int sutun = 1; sutun <= satir; sutun++) { System.out.print("*"); } System.out.println(); }
Örnek
Sağa Yaslı Üçgen
int n = 3;
for (int satir = 1; satir <= n; satir++) {
for (int bosluk = 0; bosluk < n - satir; bosluk++)
System.out.print(" ");
for (int yildiz = 0; yildiz < satir; yildiz++)
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 - satir boşluk, sonra satir yıldız.
satir = 1: 2 boşluk gerekiyor. bosluk = 0 → ' ' yazılır.
bosluk = 1 < 2 → ' ' yazılır.
Boşluklar bitti; 1 yıldız: yildiz = 0 → *
Satır tamam (her satır n = 3 karakter): println.
satir = 2: 1 boşluk gerekiyor. bosluk = 0 → ' ' yazılır.
Boşluklar bitti; 2 yıldız: yildiz = 0 → *
yildiz = 1 < 2 → *
Satır tamam (her satır n = 3 karakter): println.
satir = 3: bosluk < 3 − 3 = 0 → false: bu satırda hiç boşluk yok.
Boşluklar bitti; 3 yıldız: yildiz = 0 → *
yildiz = 1 < 3 → *
yildiz = 2 < 3 → *
Satır tamam (her satır n = 3 karakter): println.
int n = 3; for (int satir = 1; satir <= n; satir++) { for (int bosluk = 0; bosluk < n - satir; bosluk++) System.out.print(" "); for (int yildiz = 0; yildiz < satir; yildiz++) 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 satir = 1; satir <= n; satir++) {
for (int deger = 1; deger <= satir; deger++) {
System.out.print(deger + " ");
}
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 deger + " " (sayı ve boşluk) yazılır.
satir = 1: değer 1’den 1’e kadar. deger = 1 → “1 ”
deger = 2 <= 1 → false; println.
satir = 2: değer 1’den 2’ye kadar. deger = 1 → “1 ”
deger = 2 → “2 ” (yazılan sayı iç döngü değişkeni).
deger = 3 <= 2 → false; println.
satir = 3: değer 1’den 3’e kadar. deger = 1 → “1 ”
deger = 2 → “2 ” (yazılan sayı iç döngü değişkeni).
deger = 3 → “3 ” (yazılan sayı iç döngü değişkeni).
deger = 4 <= 3 → false; println.
satir = 4: değer 1’den 4’e kadar. deger = 1 → “1 ”
deger = 2 → “2 ” (yazılan sayı iç döngü değişkeni).
deger = 3 → “3 ” (yazılan sayı iç döngü değişkeni).
deger = 4 → “4 ” (yazılan sayı iç döngü değişkeni).
deger = 5 <= 4 → false; println.
int n = 4; for (int satir = 1; satir <= n; satir++) { for (int deger = 1; deger <= satir; deger++) { System.out.print(deger + " "); } 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ü ilk değer verme, 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.
- Rakam kalıbı (
% 10,/ 10): basamak sayısı, ters çevirme, palindrom, Armstrong; bölen kalıbı: asal ve mükemmel sayı. - 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?
Özet
Alıştırmalar
- Klavyeden 0 girilene kadar sayı okuyup toplamlarını ve ortalamalarını yazan programı yazın (while).
- 1’den 100’e kadar 3’e ya da 5’e bölünen sayıların toplamını bulun (cevap: 2418).
- n satırlık piramit çizin: satır r’de n − r boşluk ve 2r − 1 yıldız (n = 4 için elle izleyin).
- Bir sayının faktöriyelini for ile hesaplayın; 13! neden int’e sığmaz, long ile deneyin.
- Kullanıcıdan 1–5 arası bir not alana kadar tekrar soran girdi doğrulamasını do-while ile yazın.
- 1..1000 arasındaki tüm Armstrong (3 basamaklı) ve mükemmel sayıları listeleyin.
Özet
Kaynaklar
- Deitel ve Deitel, Java: How to Program, Early Objects, 11. baskı, Pearson, 2018.
- Liang, Introduction to Java Programming and Data Structures, 13. baskı, Pearson, 2024.
- Oracle, The Java Tutorials: while and do-while, for, Branching Statements.
- Sedgewick ve Wayne, Computer Science: An Interdisciplinary Approach, Addison-Wesley, 2016: 1.3 Conditionals and Loops.
- Downey ve Mayfield, Think Java, 2. baskı, O'Reilly, 2019 (ücretsiz çevrim içi sürüm).