Eğitim Portalı/Java/Kontrol Yapıları
Java01-java/01-kontrol-yapilari

Kontrol Yapıları

Bir program, satırları yukarıdan aşağıya çalıştırır. Ama gerçek hayattaki problemler bu kadar düz değildir: bazen bir koşula göre farklı bir yol seçmemiz, bazen bir işi defalarca tekrarlamamız gerekir. İşte kontrol ya…

Kontrol Yapıları

Bir program, satırları yukarıdan aşağıya çalıştırır. Ama gerçek hayattaki problemler bu kadar düz değildir: bazen bir koşula göre farklı bir yol seçmemiz, bazen bir işi defalarca tekrarlamamız gerekir. İşte kontrol yapıları programın akışını yönlendirmemizi sağlar. Bu bölümde kararlar (koşullar) ve tekrarlar (döngüler) ile programı canlandırıyoruz.

Koşul ifadeleri

if / else if / else

En temel karar yapısı if'tir. Parantez içindeki koşul true ise blok çalışır; değilse else bloğuna düşeriz. Birden fazla durumu sırayla denemek için else if zincirleriz:

if (puan >= 90)       harf = 'A';
else if (puan >= 80)  harf = 'B';
else                  harf = 'F';

Koşullar yukarıdan aşağıya denenir ve ilk uyan blok çalışır. Bu yüzden sıralama önemlidir: daha dar (özel) koşulu üste yazarsın.

Ternary (üçlü) operatör

Tek bir değeri iki seçenekten birine göre belirleyeceksen, kısa bir yazım vardır:

String durum = (harf == 'F') ? "Kaldı" : "Geçti";

koşul ? doğruysa : yanlışsa — okunabilirliği bozmadığı sürece kısa atamalar için idealdir.

switch

Bir değişkeni birçok sabit değere karşı kontrol edeceksen switch daha okunaklıdır. Modern switch expression (Java 14+) ok (->) sözdizimiyle hem break derdini ortadan kaldırır hem de doğrudan bir değer üretebilir:

String gunAdi = switch (gunNo) {
    case 1 -> "Pazartesi";
    case 6, 7 -> "Hafta sonu"; // birden çok etiket gruplanabilir
    default -> "Geçersiz gün";
};

Örnek 1 (./Ornek1.java) if/else, ternary ve switch'i bir not değerlendirme ve gün adı bulma senaryosunda bir arada gösterir.

Döngüler

Aynı işi tekrar tekrar yapmak için döngüler kullanırız. Üç temel döngü vardır ve hangisini seçeceğin işin doğasına bağlıdır.

for

Tekrar sayısını baştan bildiğin durumlarda en uygunudur. Tek satırda başlangıç, koşul ve artışı bir arada tanımlar:

for (int i = 1; i <= 10; i++) {
    System.out.println(5 * i);
}

while

Tekrar sayısını bilmiyorsan ama bir koşul sağlandığı sürece dönmek istiyorsan while kullanırsın. Koşul önce kontrol edilir; ilk seferde sağlanmazsa gövde hiç çalışmaz.

do-while

while'ın aksine gövde en az bir kez çalışır, koşul sonra kontrol edilir. Menü gösterme gibi "önce yap, sonra devam edip etmeyeceğine bak" durumlarında kullanışlıdır.

Örnek 2 (./Ornek2.java) çarpım tablosu, toplam ve faktöriyel hesaplarıyla üç döngü türünü de karşılaştırmalı gösterir.

break ve continue

Döngülerin akışını içeriden de yönetebiliriz:

  • break: Döngüyü hemen sonlandırır, dışarı çıkar.
  • continue: O anki adımı atlar, döngünün bir sonraki adımına geçer.

İç içe döngülerde break yalnızca içindeki döngüden çıkar. Örnek 3 (./Ornek3.java) tek sayıları seçmek için continue, bir koşulu sağlayan ilk sayıyı bulmak ve asal sayı testini erken bitirmek için break kullanır; ayrıca iç içe döngülerle bir yıldız deseni çizer.

Özet

Kararlar için if/else, ternary ve switch'i; tekrarlar için for, while ve do-while'ı gördük. break ve continue ile döngü akışını inceden inceye yönetmeyi öğrendik. Bu yapılar, az sonra göreceğimiz metotlar ile birleşince kodun gerçekten güçlenmeye başlar.

Kod Örnekleri(3)

Ornek1

çalıştırılabilir
Ornek1.java
1// Ornek1: Koşul ifadeleri — if/else, ternary ve switch expression.
2// Çalıştırma: java Ornek1.java
3public class Ornek1 {
4
5    public static void main(String[] args) {
6        // --- if / else if / else ---
7        int puan = 82; // gerçek programda kullanıcıdan gelebilir; burada sabit
8        char harf;
9        if (puan >= 90) {
10            harf = 'A';
11        } else if (puan >= 80) {
12            harf = 'B';
13        } else if (puan >= 70) {
14            harf = 'C';
15        } else if (puan >= 60) {
16            harf = 'D';
17        } else {
18            harf = 'F';
19        }
20        System.out.println("Puan " + puan + " -> Harf notu: " + harf);
21
22        // --- Ternary (üçlü) operatör: kısa if/else ---
23        // kosul ? doğruysa : yanlışsa
24        String durum = (harf == 'F') ? "Kaldı" : "Geçti";
25        System.out.println("Durum: " + durum);
26
27        // --- switch expression (Java 14+) ---
28        // Ok (->) sözdizimi: break gerekmez, doğrudan değer üretebilir.
29        int gunNo = 3;
30        String gunAdi = switch (gunNo) {
31            case 1 -> "Pazartesi";
32            case 2 -> "Salı";
33            case 3 -> "Çarşamba";
34            case 4 -> "Perşembe";
35            case 5 -> "Cuma";
36            case 6, 7 -> "Hafta sonu";
37            default -> "Geçersiz gün";
38        };
39        System.out.println("Gün " + gunNo + " -> " + gunAdi);
40
41        // switch ile birden çok etiketi gruplayabiliriz (6, 7 -> ...).
42        String tip = switch (gunNo) {
43            case 6, 7 -> "Tatil";
44            default -> "İş günü";
45        };
46        System.out.println(gunAdi + " bir " + tip);
47    }
48}
Çıktı yerel JDK 21 ile yakalandı — tarayıcıda JVM çalışmaz.

Ornek2

çalıştırılabilir
Ornek2.java
1// Ornek2: Döngüler — for, while ve do-while.
2// Çalıştırma: java Ornek2.java
3public class Ornek2 {
4
5    public static void main(String[] args) {
6        // --- for döngüsü: başlangıç; koşul; artış ---
7        System.out.println("5'in çarpım tablosu (for):");
8        for (int i = 1; i <= 10; i++) {
9            System.out.printf("5 x %2d = %2d%n", i, 5 * i);
10        }
11
12        // --- while döngüsü: koşul önce kontrol edilir ---
13        // 1'den 5'e kadar olan sayıların toplamı.
14        System.out.println("\n1..5 toplamı (while):");
15        int sayi = 1;
16        int toplam = 0;
17        while (sayi <= 5) {
18            toplam += sayi; // toplam = toplam + sayi
19            sayi++;
20        }
21        System.out.println("Toplam = " + toplam);
22
23        // --- do-while döngüsü: gövde EN AZ bir kez çalışır, koşul sonra kontrol edilir ---
24        System.out.println("\n5! (faktöriyel, do-while):");
25        int n = 5;
26        long faktoriyel = 1;
27        int k = 1;
28        do {
29            faktoriyel *= k;
30            k++;
31        } while (k <= n);
32        System.out.println(n + "! = " + faktoriyel);
33
34        // for ile geriye doğru sayma
35        System.out.println("\nGeri sayım:");
36        for (int i = 5; i >= 1; i--) {
37            System.out.print(i + " ");
38        }
39        System.out.println("Başla!");
40    }
41}
Çıktı yerel JDK 21 ile yakalandı — tarayıcıda JVM çalışmaz.

Ornek3

çalıştırılabilir
Ornek3.java
1// Ornek3: İç içe döngüler, break ve continue.
2// Çalıştırma: java Ornek3.java
3public class Ornek3 {
4
5    public static void main(String[] args) {
6        // --- continue: bu adımı atla, döngüye devam et ---
7        // 1..20 arasındaki TEK sayıları yazdır (çiftleri atla).
8        System.out.println("1..20 arasındaki tek sayılar:");
9        for (int i = 1; i <= 20; i++) {
10            if (i % 2 == 0) {
11                continue; // çift sayıyı atla
12            }
13            System.out.print(i + " ");
14        }
15        System.out.println();
16
17        // --- break: döngüyü tamamen sonlandır ---
18        // 30'dan büyük ilk 7'ye tam bölünen sayıyı bul.
19        System.out.println("\n30'dan büyük, 7'ye tam bölünen ilk sayı:");
20        for (int i = 31; ; i++) {        // koşulsuz döngü; çıkışı break sağlar
21            if (i % 7 == 0) {
22                System.out.println(i);
23                break;
24            }
25        }
26
27        // --- İç içe döngü: 2..10 arası asal sayılar ---
28        System.out.println("\n2..20 arasındaki asal sayılar:");
29        for (int sayi = 2; sayi <= 20; sayi++) {
30            boolean asal = true;
31            for (int bolen = 2; bolen <= sayi / 2; bolen++) {
32                if (sayi % bolen == 0) {
33                    asal = false;
34                    break; // bölen bulundu, iç döngüden çık
35                }
36            }
37            if (asal) {
38                System.out.print(sayi + " ");
39            }
40        }
41        System.out.println();
42
43        // --- İç içe döngü ile yıldız deseni ---
44        System.out.println("\nYıldız üçgeni:");
45        for (int satir = 1; satir <= 5; satir++) {
46            for (int yildiz = 1; yildiz <= satir; yildiz++) {
47                System.out.print("* ");
48            }
49            System.out.println();
50        }
51    }
52}
Çıktı yerel JDK 21 ile yakalandı — tarayıcıda JVM çalışmaz.