Bölüm 7: Koşullu İfadeler
Giriş
Öğrenme Çıktıları
Sıralı, seçmeli ve tekrarlı akışı ayırt etmek.
Karşılaştırma ve mantık işleçleriyle koşul yazmak.
if, else if ve else yapılarını doğru sırada kurmak.
Ayrık seçeneklerde switch kullanmak.
Temeller
Üç Temel Akış
- Sıralı yapı deyimleri yazıldığı sırada yürütür; karar yapısı koşula göre farklı yol seçer.
- Döngü yapısı bir kod bloğunu tekrarlar.
- Bu üç yapı her algoritmanın temel yürütme modelini oluşturur.
Temeller
Sıralı İşlemler
double taban = 8; double yukseklik = 5; double alan = taban * yukseklik / 2; System.out.println(alan);
- Her deyim bir öncekinin ürettiği değeri kullanabilir.
- Sıra değiştirilirse tanımsız veya yanlış değer oluşabilir.
Temeller · Kodu adım adım çalıştır
Sıralı İşlemler Adım Adım
taban = 8 → double kutuya 8.0 olarak yazılır (genişletme).
yukseklik = 5.0.
Soldan sağa: önce taban * yukseklik = 40.0.
40.0 / 2 = 20.0 → alan kutusuna yazılır. Bu satır önceki iki kutunun değerini kullanır.
20.0 yazdırılır. Satır 3, satır 1'den önce olsaydı taban henüz tanımsız olurdu → derleme hatası.
double taban = 8; double yukseklik = 5; double alan = taban * yukseklik / 2; System.out.println(alan);
Kararlar
Karar Verme
- Koşul boolean değer üretir.
- if doğru yolu, else yanlış yolu tanımlar.
- Bağımsız if'lerin hepsi denetlenir; else-if zincirinde ilk doğru dal çalışınca gerisi atlanır.
- Örnek: not = 95. Sağda iki yazımın farklı sonucu.
Kararlar
if-else Yapısı
if (not >= 60) { System.out.println("Geçti"); } else { System.out.println("Kaldı"); }
- Sınır değeri koşulun parçasıdır: 60 → Geçti.
- Her olası değer yalnızca bir dala gider.
Kararlar · Kodu adım adım çalıştır
if-else Adım Adım: not = 75, 60, 45
1. çalıştırma: kullanıcı 75 girer.
Koşul: not >= 60 → 75 >= 60 → true.
true dalı çalışır: Geçti. Diğer dal (else bloğu) atlanır.
2. çalıştırma: kullanıcı 60 girer.
Koşul: not >= 60 → 60 >= 60 → true. Sınır değeri dahil: >=.
true dalı çalışır: Geçti. Diğer dal (else bloğu) atlanır.
3. çalıştırma: kullanıcı 45 girer.
Koşul: not >= 60 → 45 >= 60 → false.
false dalı çalışır: Kaldı. Diğer dal (if bloğu) atlanır.
Scanner klavye = new Scanner(System.in); int not = klavye.nextInt(); if (not >= 60) { System.out.println("Geçti"); } else { System.out.println("Kaldı"); }
Kararlar
Çok Yollu Karar: else-if
if (not >= 90) { harf = 'A'; } else if (not >= 80) { harf = 'B'; } else if (not >= 70) { harf = 'C'; } else { harf = 'F'; }
- Koşullar yukarıdan aşağı değerlendirilir; ilk true dal çalışır, gerisi atlanır.
- Yüksek eşikler önce yazılır:
not >= 70başa yazılsaydı 95 de C alırdı. - else hiçbir koşul tutmadığında çalışır.
Kararlar · Kodu adım adım çalıştır
else-if Zinciri: not = 75, 95, 50
1. çalıştırma: not = 75. harf bildirildi, henüz değeri yok.
1. koşul: not >= 90 → 75 >= 90 → false. Sonraki koşula geçilir.
2. koşul: not >= 80 → 75 >= 80 → false. Sonraki koşula geçilir.
3. koşul: not >= 70 → 75 >= 70 → true. Bu dal seçilir.
harf = 'C'. Zincirin geri kalanı denetlenmeden atlanır.
C yazdırılır.
2. çalıştırma: not = 95. harf bildirildi, henüz değeri yok.
1. koşul: not >= 90 → 95 >= 90 → true. Bu dal seçilir.
harf = 'A'. Zincirin geri kalanı denetlenmeden atlanır.
A yazdırılır.
3. çalıştırma: not = 50. harf bildirildi, henüz değeri yok.
1. koşul: not >= 90 → 50 >= 90 → false. Sonraki koşula geçilir.
2. koşul: not >= 80 → 50 >= 80 → false. Sonraki koşula geçilir.
3. koşul: not >= 70 → 50 >= 70 → false. Sonraki koşula geçilir.
Hiçbir koşul tutmadı → else: harf = 'F'.
F yazdırılır.
int not = klavye.nextInt(); char harf; if (not >= 90) harf = 'A'; else if (not >= 80) harf = 'B'; else if (not >= 70) harf = 'C'; else harf = 'F'; System.out.println(harf);
Tek deyimli dallarda süslü parantez yazılmayabilir.
Kararlar · Kodu adım adım çalıştır
Bağımsız if Zinciri: not = 95 → 3 satır
not = 95 atanır. Üç if de birbirinden bağımsızdır; hiçbiri diğerinin else dalı değildir.
95 >= 90 → true → A yazılır. Bağımsız if olduğu için sıradaki if yine de denenir.
95 >= 80 → true → B de yazılır. Önceki if’in sonucu bu koşulu etkilemez.
95 >= 70 → true → C de yazılır. Sonuç: 3 satır; tek harf beklenirken yanlış çıktı.
int not = 95; if (not >= 90) System.out.println("A"); if (not >= 80) System.out.println("B"); if (not >= 70) System.out.println("C");
Kararlar · Kodu adım adım çalıştır
Aynı not = 95, else-if zinciri → 1 satır
Aynı not = 95; bu kez koşullar else if ile zincirlenmiş.
95 >= 90 → true → A yazılır.
İlk dal çalıştığı için else if dalları hiç değerlendirilmez; 80 ve 70 koşulları denenmez.
Sonuç: yalnızca 1 satır. Bağımsız if’te 3 satır (A, B, C), else-if zincirinde 1 satır (A) çıkar.
int not = 95; if (not >= 90) System.out.println("A"); else if (not >= 80) System.out.println("B"); else if (not >= 70) System.out.println("C");
Kararlar
İç İçe Kararlar
- Bir karar dalı içinde başka karar bulunabilir: iç koşul yalnızca dış koşul true olduğunda denetlenir.
- İç içe yapı, ikinci sorunun ancak ilk koşul sağlandığında anlamlı olduğu durumlar içindir.
- Derin iç içelik okunabilirliği azaltır; koşullar
&&ile birleştirilebilir.
Kararlar · Kodu adım adım çalıştır
İç İçe Karar: 3 farklı girdi
1. çalıştırma: yas = 20, ehliyet = true.
Dış koşul: yas >= 18 → 20 >= 18 → true. İç if'e girilir.
İç koşul: ehliyet → true.
Araç kullanabilir yazdırılır.
2. çalıştırma: yas = 20, ehliyet = false.
Dış koşul: yas >= 18 → 20 >= 18 → true. İç if'e girilir.
İç koşul: ehliyet → false.
Önce ehliyet almalı yazdırılır.
3. çalıştırma: yas = 15, ehliyet = true.
Dış koşul: 15 >= 18 → false. İç if hiç denetlenmez; ehliyet true olsa bile önemsizdir.
Dış else çalışır: Yaş yetersiz.
int yas = klavye.nextInt(); boolean ehliyet = klavye.nextBoolean(); if (yas >= 18) { if (ehliyet) System.out.println("Araç kullanabilir"); else System.out.println("Önce ehliyet almalı"); } else { System.out.println("Yaş yetersiz"); }
Kararlar · Kodu adım adım çalıştır
Sarkan else (dangling else): a = −1
Başlangıç: a = -1, b = 5, x = 0. Girinti else’in dış if’e ait olduğunu düşündürür, ama derleyici girintiye bakmaz.
a > 0 → −1 > 0 → false. Dış if’in gövdesi (iç if ve onun else’i dahil) tümüyle atlanır.
else en yakın if’e (if (b > 0)) bağlanır; o if hiç çalışmadığı için else de çalışmadı. x değişmedi: 0 yazılır.
int a = -1, b = 5, x = 0; if (a > 0) if (b > 0) x = 1; else x = 2; System.out.println(x);
Kararlar · Kodu adım adım çalıştır
Sarkan else’i Süslü Parantezle Düzeltmek
Aynı başlangıç değerleri. Bu kez iç if süslü parantezle kapatılmış; else dış if’e aittir.
a > 0 → false. İç if bloğu atlanır, else bloğuna geçilir.
else bloğu çalışır: x = 2.
2 yazılır. Belirsizliği gidermek için iç içe if’lerde her zaman süslü parantez kullanın.
int a = -1, b = 5, x = 0; if (a > 0) { if (b > 0) x = 1; } else { x = 2; } System.out.println(x);
Kararlar
Mantıksal İşleçlerle Karar
boolean uygun = yas >= 18 && belgeVar; if (uygun) { System.out.println("Başvuru alınabilir"); }
- && iki koşulun da doğru olmasını ister.
- || seçeneklerden en az birinin doğru olmasını ister.
Kararlar · Kodu adım adım çalıştır
&& ile Karar: 3 farklı girdi
1. çalıştırma: yas = 20, belgeVar = true.
20 >= 18 → true; sağ taraf gerekli: belgeVar → true. true && true → true.
Başvuru alınabilir yazdırılır.
2. çalıştırma: yas = 20, belgeVar = false.
20 >= 18 → true; sağ taraf gerekli: belgeVar → false. true && false → false.
uygun false → blok atlanır, çıktı yok.
3. çalıştırma: yas = 16, belgeVar = true.
16 >= 18 → false. Kısa devre: belgeVar okunmaz, sonuç kesin false.
uygun false → blok atlanır, çıktı yok.
int yas = klavye.nextInt(); boolean belgeVar = klavye.nextBoolean(); boolean uygun = yas >= 18 && belgeVar; if (uygun) { System.out.println("Başvuru alınabilir"); }
Kararlar
! ve De Morgan Kuralları
| a | b | !(a && b) | !a || !b | !(a || b) | !a && !b |
|---|---|---|---|---|---|
| false | false | true | true | true | true |
| false | true | true | true | false | false |
| true | false | true | true | false | false |
| true | true | false | false | false | false |
// Başvuru reddedilsin: 18 yaşından küçük ya da belge yok if (!(yas >= 18 && belgeVar)) { … } // De Morgan ile aynı koşul: if (yas < 18 || !belgeVar) { … }
!parantezin içine dağıtılırken&&ile||yer değiştirir, her terim de tersine döner.- Karşılaştırmaların tersi:
>=↔<,>↔<=,==↔!=.
Kararlar
Kısa Devresiz & ve |
int a = 10, b = 0; if (b != 0 && a / b > 1) { … } // güvenli: a / b hiç hesaplanmaz if (b != 0 & a / b > 1) { … } // ArithmeticException: / by zero
Tek karakterli & ve | boolean değerlerde de kullanılır, ama iki tarafı da her zaman değerlendirir.
static int sayac = 0; static boolean kontrol(boolean v) { sayac++; return v; }
| İfade (sayac 0’dan başlar) | sayac |
|---|---|
kontrol(false) && kontrol(true) | 1 |
kontrol(false) & kontrol(true) | 2 |
kontrol(true) || kontrol(true) | 1 |
kontrol(true) | kontrol(true) | 2 |
Kararlar · Kodu adım adım çalıştır
Koşul İşleci: (a > b) ? a : b
a = 7, b = 12.
Koşul: a > b → 7 > 12 → false. false olduğu için :'dan sonraki değer seçilir.
enBuyuk = 12. ?: bir ifadedir: değer üretir, atamada kullanılabilir.
12 yazdırılır. Aynı işi if-else 4 satırda yapar.
int a = 7, b = 12; int enBuyuk = (a > b) ? a : b; System.out.println(enBuyuk);
Kısa, iki seçenekli değer seçimlerinde kullanın; iç içe ?: okunabilirliği bozar.
Kararlar · Kodu adım adım çalıştır
String Karşılaştırma: == ile equals
Sabit "java" dizgi havuzunda oluşturulur; s1 bu nesneye referans tutar.
Aynı sabit yeniden yazıldığında havuzdaki nesne paylaşılır; s2 de aynı nesneyi gösterir.
new String("java") her zaman yeni bir nesne üretir; s3 heap’teki ayrı nesneyi gösterir.
== referansları (adresleri) karşılaştırır. s1 ve s2 aynı nesneyi gösterdiği için true.
s1 ve s3 içerik olarak aynı ama nesneler farklı → adresler farklı → false.
equals nesnelerin içeriğini karşılaştırır: "java" = "java" → true. Dizgileri hep equals ile karşılaştırın.
String s1 = "java"; String s2 = "java"; String s3 = new String("java"); System.out.println(s1 == s2); System.out.println(s1 == s3); System.out.println(s1.equals(s3));
switch
switch Ne Zaman?
- Tek bir ifadenin ayrık değerlerine göre seçim yaparken okunabilirdir.
- case etiketleri sabit seçenekleri temsil eder; eşleşen case'e doğrudan gidilir.
- Aralık ve karmaşık mantıksal koşullarda if-else çoğunlukla daha uygundur.
switch
switch İfadesi
String mevsim = switch (ay) { case 12, 1, 2 -> "Kış"; case 3, 4, 5 -> "İlkbahar"; case 6, 7, 8 -> "Yaz"; case 9, 10, 11 -> "Sonbahar"; default -> "Geçersiz"; };
- Ok biçimi yanlışlıkla sonraki case'e geçişi önler.
- default beklenmeyen değerleri ele alır. Switch ifadesinde (
x = switch …) tüm değerler kapsanmalıdır; int ve String içindefaultzorunludur, switch deyiminde isteğe bağlıdır. Bu yazım Java 14 ve sonrası içindir.
switch · Kodu adım adım çalıştır
switch İfadesi: ay = 4, 12, 13
1. çalıştırma: ay = 4.
switch (ay) → 4: 4 bu case'in listesinde. Seçilen dalın değeri: "İlkbahar".
switch ifadesinin ürettiği değer mevsim'e atanır: mevsim = "İlkbahar". Başka case çalışmaz.
İlkbahar yazdırılır.
2. çalıştırma: ay = 12.
switch (ay) → 12: 12 bu case'in listesinde. Seçilen dalın değeri: "Kış".
switch ifadesinin ürettiği değer mevsim'e atanır: mevsim = "Kış". Başka case çalışmaz.
Kış yazdırılır.
3. çalıştırma: ay = 13.
switch (ay) → 13: 13 hiçbir case'te yok → default. Seçilen dalın değeri: "Geçersiz".
switch ifadesinin ürettiği değer mevsim'e atanır: mevsim = "Geçersiz". Başka case çalışmaz.
Geçersiz yazdırılır.
int ay = klavye.nextInt(); String mevsim = switch (ay) { case 12, 1, 2 -> "Kış"; case 3, 4, 5 -> "İlkbahar"; case 6, 7, 8 -> "Yaz"; case 9, 10, 11 -> "Sonbahar"; default -> "Geçersiz"; }; System.out.println(mevsim);
switch
switch İfadesinde yield
int yil = 2024, ay = 2; int gun = switch (ay) { case 4, 6, 9, 11 -> 30; case 2 -> { System.out.println("Şubat"); yield yil % 4 == 0 ? 29 : 28; } default -> 31; }; System.out.println(gun);
Çıktı: Şubat ve 29 (iki satır).
- Tek ifadeli dalda değer doğrudan yazılır; birden çok deyim gerekiyorsa dal
{ }bloğuna alınır ve değeryieldile verilir. - Blok
yieldolmadan biterse derleme hatası olur:switch rule completes without providing a value. - Java 14 ve sonrası içindir; artık yıl denetimi burada basitleştirilmiştir (100/400 kuralı yok).
switch · Kodu adım adım çalıştır
Klasik switch: break Unutulursa
gun = 2.
switch (gun) → 2: doğrudan case 2 etiketine atlanır; case 1 hiç denetlenmez.
"Salı" yazdırılır. Bu case'te break yok!
Aşağı düşme (fall-through): etiket denetlenmeden sonraki case'in kodu da çalışır → "Çar".
break switch'ten çıkarır; default çalışmaz. Ok (->) biçimi bu hatayı önler.
int gun = 2; switch (gun) { case 1: System.out.println("Pzt"); break; case 2: System.out.println("Salı"); case 3: System.out.println("Çar"); break; default: System.out.println("Yok"); }
switch
if-else ve switch
| Ölçüt | if-else | switch |
|---|---|---|
| Aralık koşulu | Uygun | Doğrudan uygun değil |
| Tek değere göre çok seçenek | Kullanılabilir | Genellikle daha açık |
| Karmaşık mantık | Uygun | Sınırlı |
| Her dal sonuç üretir | Atama gerekir | switch ifadesi değer döndürebilir |
Örnek
Tek mi Çift mi?
int sayi = 17; if (sayi % 2 == 0) System.out.println("Çift"); else System.out.println("Tek");
- 2 ile bölümden kalan 0 ise sayı çifttir.
- Negatiflerde de doğru çalışır. Ama Java'da -7 % 2 = -1 olduğundan tek sayıyı
sayi % 2 == 1ile sınamak yanlıştır.
Örnek · Kodu adım adım çalıştır
Tek mi Çift mi? sayi = 17, −4, −7
1. çalıştırma: sayi = 17.
Önce kalan: 17 % 2 = 1.
1 == 0 → false.
Tek yazdırılır.
2. çalıştırma: sayi = -4.
Önce kalan: -4 % 2 = 0.
0 == 0 → true.
Çift yazdırılır.
3. çalıştırma: sayi = -7.
Önce kalan: -7 % 2 = -1 (Java'da kalanın işareti bölünenin işaretidir).
-1 == 0 → false.
Tek yazdırılır. -7 % 2 == 1 koşulu kullanılsaydı sonuç false olurdu!
int sayi = klavye.nextInt(); if (sayi % 2 == 0) System.out.println("Çift"); else System.out.println("Tek");
Örnek
Mutlak Değer
int sayi = -8; if (sayi < 0) { sayi = -sayi; } System.out.println(sayi);
- Sıfır ve pozitif değer değişmeden kalır.
- Integer.MIN_VALUE özel bir taşma durumudur.
Örnek · Kodu adım adım çalıştır
Mutlak Değer: sayi = −8, 5, MIN_VALUE
1. çalıştırma: sayi = -8.
Koşul: sayi < 0 → -8 < 0 → true.
sayi = -sayi → -(-8) = 8.
8 yazdırılır.
2. çalıştırma: sayi = 5.
Koşul: sayi < 0 → 5 < 0 → false. Blok atlanır, değer değişmez.
5 yazdırılır.
3. çalıştırma: sayi = -2147483648 (Integer.MIN_VALUE).
Koşul: sayi < 0 → -2147483648 < 0 → true.
-(-2147483648) = 2147483648 int aralığına sığmaz → taşma: sonuç yine -2147483648!
-2147483648 yazdırılır. Mutlak değer negatif çıktı: özel durum.
int sayi = klavye.nextInt(); if (sayi < 0) { sayi = -sayi; } System.out.println(sayi);
Örnek · Kodu adım adım çalıştır
Artık Yıl: 2024, 2023, 1900, 2000
1. çalıştırma: yil = 2024.
2024 % 4 = 0 → true; 2024 % 100 = 24 → yil % 100 != 0 → true. Parantez içi: true.
Sol taraf true → || kısa devre: 400 kuralına bakılmaz. artik = true.
2024 artık yıl.
2. çalıştırma: yil = 2023.
2023 % 4 = 3 → false; && kısa devre yapar. Parantez içi: false.
Sol taraf false → sağa bakılır: 2023 % 400 = 23 → false. artik = false.
2023 normal yıl.
3. çalıştırma: yil = 1900.
1900 % 4 = 0 → true; 1900 % 100 = 0 → yil % 100 != 0 → false. Parantez içi: false.
Sol taraf false → sağa bakılır: 1900 % 400 = 300 → false. artik = false.
1900 normal yıl. 100'e bölünen yüzyıllar, 400'e de bölünmedikçe artık değildir.
4. çalıştırma: yil = 2000.
2000 % 4 = 0 → true; 2000 % 100 = 0 → yil % 100 != 0 → false. Parantez içi: false.
Sol taraf false → sağa bakılır: 2000 % 400 = 0 → true. artik = true.
2000 artık yıl.
int yil = klavye.nextInt(); boolean artik = (yil % 4 == 0 && yil % 100 != 0) || yil % 400 == 0; if (artik) System.out.println(yil + " artık yıl"); else System.out.println(yil + " normal yıl");
Örnek · Kodu adım adım çalıştır
İkinci Dereceden Denklem: Δ > 0, Δ = 0, Δ < 0
1. çalıştırma: a = 1.0, b = -3.0, c = 2.0.
d = Δ = b² − 4ac = 9.0 − 8.0 = 1.0.
1.0 > 0 → true: iki farklı reel kök.
√Δ = 1.0; x1 = (3.0 + 1.0) / 2.0 = 2.0, x2 = 1.0.
2.0 ve 1.0: parabol x eksenini iki noktada keser.
2. çalıştırma: a = 1.0, b = -2.0, c = 1.0.
d = Δ = b² − 4ac = 4.0 − 4.0 = 0.0.
Δ > 0 false; Δ == 0 → true: tek (çakışık) kök.
x = −b / 2a = 2.0 / 2.0 = 1.0: parabol eksene teğet.
3. çalıştırma: a = 1.0, b = 0.0, c = 1.0.
d = Δ = b² − 4ac = 0.0 − 4.0 = -4.0.
-4.0 > 0 false, -4.0 == 0 false → else.
Reel kök yok: parabol ekseni kesmez. Math.sqrt(negatif) NaN verirdi; else bunu önler.
double a = klavye.nextDouble(); double b = klavye.nextDouble(); double c = klavye.nextDouble(); double d = b * b - 4 * a * c; if (d > 0) { double x1 = (-b + Math.sqrt(d)) / (2 * a); double x2 = (-b - Math.sqrt(d)) / (2 * a); System.out.println(x1 + " ve " + x2); } else if (d == 0) { System.out.println(-b / (2 * a)); } else { System.out.println("Reel kök yok"); }
Örnek · Kodu adım adım çalıştır
Üç Sayının En Büyüğü: 3 farklı girdi
1. çalıştırma: 7, 12, 5.
Aday: enBuyuk = a = 7.
b > enBuyuk → 12 > 7 → true.
Yeni aday: enBuyuk = b = 12.
c > enBuyuk → 5 > 12 → false; aday değişmez.
En büyük: 12.
2. çalıştırma: 3, 3, 9.
Aday: enBuyuk = a = 3.
b > enBuyuk → 3 > 3 → false; aday değişmez. Eşit değer adayı değiştirmez.
c > enBuyuk → 9 > 3 → true.
Yeni aday: enBuyuk = c = 9.
En büyük: 9.
3. çalıştırma: 8, 2, 4.
Aday: enBuyuk = a = 8.
b > enBuyuk → 2 > 8 → false; aday değişmez.
c > enBuyuk → 4 > 8 → false; aday değişmez.
En büyük: 8.
int a = klavye.nextInt(); int b = klavye.nextInt(); int c = klavye.nextInt(); int enBuyuk = a; if (b > enBuyuk) enBuyuk = b; if (c > enBuyuk) enBuyuk = c; System.out.println("En büyük: " + enBuyuk);
Kısa yol: Math.max(a, Math.max(b, c)). "Aday + karşılaştır" kalıbı döngüyle genellenebilir.
Örnek · Kodu adım adım çalıştır
switch ile Hesap Makinesi: *, /0, %
1. çalıştırma: kullanıcı 8.0 * 2.5 girer; next() işareti dizgi olarak okur.
switch (op) → "*": eşleşen case "*".
8.0 * 2.5 = 20.0 yazdırılır. Diğer case'ler çalışmaz.
2. çalıştırma: kullanıcı 7.0 / 0.0 girer; next() işareti dizgi olarak okur.
switch (op) → "/": eşleşen case "/".
Bölmeden önce denetim: y == 0 → true. (double'da 7.0 / 0 hata vermez, Infinity üretir; bu yüzden kontrol ederiz.)
Hata! yazdırılır.
3. çalıştırma: kullanıcı 5.0 % 3.0 girer; next() işareti dizgi olarak okur.
switch (op) → "%": hiçbir case eşleşmez → default.
Geçersiz: % bu hesap makinesinde tanımlı değil; default beklenmeyen girdiyi yakalar.
double x = klavye.nextDouble(); String op = klavye.next(); double y = klavye.nextDouble(); switch (op) { case "+" -> System.out.println(x + y); case "-" -> System.out.println(x - y); case "*" -> System.out.println(x * y); case "/" -> { if (y == 0) System.out.println("Hata!"); else System.out.println(x / y); } default -> System.out.println("Geçersiz"); }
Özet
Bölüm Özeti
- Sıralı yapı deyimleri yazıldığı sırada yürütür; karar yapısı koşula göre yol seçer.
- Koşul her zaman boolean bir değer üretmelidir.
- else-if zincirinde koşullar yukarıdan aşağı denenir; ilk doğru dal çalışır.
- Aralık ve karmaşık koşullarda if-else, tek değerin ayrık seçeneklerinde switch uygundur.
Özet
Kontrol Soruları
- Bağımsız if yapıları ile else-if zinciri nasıl farklıdır?
- Not harf dönüşümünde eşikler neden büyükten küçüğe yazılır?
- İç içe karar yerine && ne zaman kullanılabilir?
- switch için default neden yararlıdır?
- Bir sayının çift olduğu hangi koşulla anlaşılır?
Özet
Alıştırmalar
- Girilen tam sayının pozitif, negatif veya sıfır olduğunu yazdırın.
- Boy ve kilodan vücut kitle indeksini (kilo / boy²) hesaplayıp zayıf / normal / fazla kilolu sınıfını yazdırın.
- Üç kenar uzunluğu bir üçgen oluşturuyor mu? Oluşturuyorsa eşkenar, ikizkenar veya çeşitkenar mı?
- 1–7 arası gün numarasını switch ile gün adına çevirin; geçersiz girdide uyarı verin.
- İki sayının küçüğünü
?:ile bulun; ardından üç sayının küçüğüne genişletin. - Harf notu programına "not 0–100 dışında" kontrolü ekleyin. Bu kontrol zincirin neresine yazılmalı?
Ö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: The if-then and if-then-else Statements, The switch Statement.
- Oracle, Java Language Specification SE 21: Bölüm 14, Blocks, Statements, and Patterns.
- 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).