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ılabilir1// 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}Ornek2
çalıştırılabilir1// 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}Ornek3
çalıştırılabilir1// 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}