Java Kontrol İfadeleri


Kontrol ifadeleri bir uygulamanın hangi durumlarda ne yapması gerektiğini belirten ifadelerdir.Onlarsız bir uygulama yazamak neredeyse imkansız diyebilirim . Java programlama dilinde toplam 4 adet kontrol ifade çeşiti bulunur :
İfade tipi
Anahtar Kelime
 döngüleme
while, do-while , for
 karar verme
if-else, switch-case
 istisna yakalama
try-catch-finally, throw 
 dallandırma
break, continue, label:, return
tablo-12

Döngüleme

while - do while

while
while ifadesi , çalışması istenen kod bloğunu , durum true ifadesini bulana kadar devamlı olarak çalıştırır.Genel yazım ifadesi aşağıdaki gibidir
while (durum) {
    çalışması istenen kod bloğu 
}
while ifadesi ilk önce durumun true olup olmadığına bakar , eğer durum true ise döngüye girerek çalışması istenen kod bloğunu çalıştırır bu süreç durumun false olmasına kadar sürüp gider .
ör-while
public class WhileOrnek {
 
    public static void main(String args[]) {
 
         int i = 0 ; //döngü kontrol degiskeni
         while (i < 10 ) 
         {
             System.out.println("i = " + i);
             i++ ;
         }
         System.out.println("Sayma islemi tamamlandi.");
    }
 
}

Uygulamanın çıktısı :
 i = 0
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
Sayma islemi tamamlandi.
do-while
do-while ifadesinin genel yazım şekli aşağıdaki gibidir :
do {
    çalışması istenen kod bloğu 
} while (durum);
do-while ifadesi, durumu en yukarıda değilde en aşağıda hesaplar , böylece do-while ifadesinde durum false olsa bile çalışması istenen kod bloğuna en az bir kere girilir.
ör-dowhile
public class WhileDoOrnek {
 
        public static void main(String args[])
        {
               int i = 0 ; //döngü kontrol degiskeni
               do
               {
                       System.out.println("i = " + i);
                       i++ ;
               } while ( i < 0 );             
            System.out.println("Sayma islemi tamamlandi.");
        }
}
Bu örneğimizi while ifadesi ile yazmış olsaydık ekranda sadece "Sayma islemi tamamladi" ibaresini görecektik ama do-while ifadesi kullanarak çalışması istenen kod bloğuna durum false olsa dahi bir kere girmesini sağladık.
while döngüsü kullanırken dikkat edilmesi gereken hususlar kısaca belirtirsek ;
1. Döngü kontrol değişkenine uygun bir şekilde değer atandığına dikkat edin.
2. Döngü durumunun true ile başlamısına dikkat edin.
3. Döngü kontrol değişkeninin uygun bir şekilde güncellendiğinden emin olun.(sonsuz döngüye girmemesi için)

for ifadesi

for ifadesi döngüsel işlemleri daha bir derli toplu yapma şeklidir. Döngünün ne zaman başlayacağı ve ne zaman biteceği en başta belirtilmiştir . for ifadesinin genel yazım ifadesi aşağıdaki gibidir :
for (başlangıç durumunu belirtme ; sonlanma durumunu belirtme; artış) {
    çalışması istenen kod bloğu 
}
ör-for-2
public class ForOrnek {
 
  public static void main(String args[]) {
 
    for (int i=0 ; i < 10 ; i ++) 
    {
      System.out.println("i = " + i);
    } 
  }
}
Uygulamın çıktısı
i = 0
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
for ifadesi kullanarak sonsuz döngü oluşturmak isterseniz aşağıdaki ifadeyi kullanabilirsiniz.
for ( ; ; ) {    // sonsuz döngü
    ...
}
ayrıca for ifadesinin içersinde birden fazla değişken kullanabilirsiniz
ör-for-2
public class ForOrnekVersiyon2 {
 
  public static void main(String args[]) {
 
    for ( int i = 0 , j = 0 ; i < 20 ; i++ , j++ ) 
    {
       i *= j ;
      System.out.println("i = " + i + " j = " + j);
    } 
  }
}
Uygulamanın çıktısı :
i = 0 j = 0
i = 1 j = 1
i = 4 j = 2
i = 15 j = 3
i = 64 j = 4

Karar Verme

if-else ifadesi

Bazı kriterlere göre uygulamanızın akışını değiştirmek istiyorsanız doğru yerdesiniz. if koşuluna, durum eğer true ise girecektir.Genel yazım ifadesi aşağıdaki gibidir.
if (durum) {
  durum true olduğunda çalışması istenen kod bloğu
} else {
  durum false olduğunda çalışması istenen kod bloğu
}
ör-if-else-1
public class IfElseTest {
  public static void main(String[] args) {
 
    int puan = 76;
    char sonuc;
 
    if (puan >= 90) {
     sonuc = 'A';
    } else if (puan >= 80) {
     sonuc = 'B';
    } else if (puan >= 70) {
     sonuc = 'C';
    } else if (puan >= 60) {
     sonuc = 'D';
    } else {
     sonuc = 'F';
    }
    System.out.println("Sonuc = " + sonuc);
  }
}
int tipindeki puan değişkeni sıra ile tüm koşullara uğramaktadır. Uygulamamızın çıktısı aşağıdaki gibidir.
Sonuc = C
Üçlü if-else
Üçlü if-else ifadesi , önceki if-else ifadesine alternatif olarak kullanılabilir.Genel yazılış biçimi
boolean-ifade ? deger0 : deger1
Eğer boolean ifade true ise değer0 hesaplanır , eğer boolean ifade false ise deger1 hesaplanır.
Kısa devre
VE (And) işleminde(bkz1) , işleme giren iki değerinde true olması durumunda sonuç true oluyordu (bkz2) .If ifadesinde eğer VE(And) işlemi kullanılmış ise ve ilk değerden false dönmüş ise ikinci değer kesinlikle hesaplanmaz çünkü bu iki değerin sonuçu VE(And) işlemine göre true dönmesi imkansızdır. Kısa devre özelliği sayesinde uygulamalar gereksiz hesaplamalardan kurtulmuş olur .
ör-kısa-devre
 
public class KisaDevre {
 
        public static boolean hesaplaBir(int a) {
               System.out.println("hesaplaBir metoduna girildi");
               return a > 1 ;  
        }
 
        public static boolean hesaplaIki(int a) {
               System.out.println("hesaplaIki metoduna girildi");
               return a > 2 ;
        }
 
        public static void main(String[] args) {
               System.out.println("Baslangic");
               //hesaplaBir(0) --> false deger doner
               //hesaplaIki(3) --> true deger doner
 
               System.out.println("hesaplaBir(0) && hesaplaIki(3)");
               if ( hesaplaBir(0) && hesaplaIki(3) ) {
                       System.out.println(" 1 -true ");
               } else {
                       System.out.println(" 1 -false ");
               }
               System.out.println("--------");
               System.out.println("hesaplaBir(0) || hesaplaIki(3)");
               if (hesaplaBir(0) || hesaplaIki(3)) {
                       System.out.println(" 2 -true ");
               } else {
                       System.out.println(" 2 -false ");
               }
               System.out.println("--------");
               System.out.println("hesaplaBir(0) & hesaplaIki(3)");
               if (hesaplaBir(0) & hesaplaIki(3)) {
                       System.out.println(" 3 -true ");
               } else {
                       System.out.println(" 3 -false ");
               }
               System.out.println("--------");
               System.out.println("hesaplaBir(0) | hesaplaIki(3)");
               if (hesaplaBir(0) |  hesaplaIki(3)) {
                       System.out.println(" 4 -true ");
               } else {
                       System.out.println(" 4 -false ");
               }
               System.out.println("--------");
               System.out.println("hesaplaBir(0) ^ hesaplaIki(3)");
               if (hesaplaBir(0) ^  hesaplaIki(3)) {
                       System.out.println(" 5 -true ");
               } else {
                       System.out.println(" 5 -true ");
               }
               System.out.println("Son..");
 
        }
 
}
Programızı açıklarsak ; hesaplaBir() ve hesaplaIki() adında iki adet metodumuz var. Bu metodlar int tipinde değişken kabul diyorlar ve boolean tipinde sonuc üretip geri döndürüyorlar. Bu metodlara girildiği zaman ekrana kendilerini tanıtan bir yazı çıkarttırıyoruz -ki gerçekten kısa devre olup olmadığını anlayalım.
hesaplaBir() metodu kendisine gelen int tipindeki değişkeni alip 1 den büyük mü diye kontrol yapıyor , biz burada hesaplaBir() metoduna parametre olarak 0 sayısını gönderdiğimizden dolayı dönecek değerin false olucağını biliyoruz . hesaplaIki() metodunada aynı şekilde 3 sayısını göndererek bu metodun bize true değeri döndüreceğinden emin olduktan sonra işlemlere başlıyoruz.
İlk olarak metodlardan bize geri dönen değerleri VE(And) işlemine tabii tutuyoruz. Görüldüğü üzere sadece hesaplaBir() metoduna giriyor çünkü hesaplaBir() metodundan false değeri dönmekte , VE (And) işleminde true dönebilmesi için iki değerinde true olması gerektiğinden (bkz1) hesaplaIki() metoduna gitmeyerek kısa devre yapmış oldu.
İkinci olarak bize gelen değerleri VEYA(Or) işlemine tabii tutuyoruz.Görüldüğü üzere hem hesaplaBir() , hemde hesaplaIki() metodlarına girmekte.VEYA(Or) tablosunu hatırlarsanız (bkz2), sonucun false olması için iki değerinde false olması gerekmekteydi.Burada ilk değerden false değeri döndü ama ikinci değerinde hesaplanması gerek aksi taktirdi sonucun öğrenilmesi imkansız olur, bu sebebten burada kısa devre olayı gerçekleşmedi. Ama eğer ilk değer true dönseydi o zaman ikinci metod olan hesaplaIki()'ye girmeyecekti sebebei ise VEYA(Or) işlemlerinin sonucunun true olabilmesi için değerlerden birinin true olmasının yetmesidir.
Üçüncü olarak değerlerimizi yine VE(And) işlemine tabii tutuyoruz ama burada (&) operatörü kullanıldığı için kısa devre olayı ortadan kalkar ve iki metoda da ayrı ayrı girer. (bkz3)
Dördüncü olarak değerlerimizi VEYA(Or) işlemine tabii tutuyoruz fakat ( | ) operatörünün zaten kısa devre kullanımı ortadan kaldırdığı için iki metoda da ayrı ayrı girer.(bkz3) .
Son olarak değerlerimizi ÖZEL VEYA(Exclusive Or) işlemine tabii tutuyoruz , bu işlemde kesinlikle iki değerede bakılma zorunluluğu olduğundan, kısa devre işlemi söz konusu değildir.(bkz4)
Uygulamanın çıktısı
Baslangic
hesaplaBir(0) && hesaplaIki(3)
hesaplaBir metoduna girildi
1 -false
--------
hesaplaBir(0) || hesaplaIki(3)
hesaplaBir metoduna girildi
hesaplaIki metoduna girildi
2 -true
--------
hesaplaBir(0) & hesaplaIki(3)
hesaplaBir metoduna girildi
hesaplaIki metoduna girildi
3 -false
--------
hesaplaBir(0) | hesaplaIki(3)
hesaplaBir metoduna girildi
hesaplaIki metoduna girildi
4 -true
--------
hesaplaBir(0) ^ hesaplaIki(3)
hesaplaBir metoduna girildi
hesaplaIki metoduna girildi
5 -true
Son..

switch ifadesi

switch ifadesi , tamsayıların karşılaştırılması ile doğru koşulların elde edilmesini sağlayan mekanizmadır. switch ifadesinin genel yazım biçimi aiağıdaki gibidir
switch(tamsayı) {
  case uygun-tamsayı-deger1 : çalışması istenen kod bloğu; break; 
  case uygun-tamsayı-deger2 : çalışması istenen kod bloğu; break;
  case uygun-tamsayı-deger3 : çalışması istenen kod bloğu; break;
  case uygun-tamsayı-deger4 : çalışması istenen kod bloğu; break;
  case uygun-tamsayı-deger5 : çalışması istenen kod bloğu; break;
          // ...
  default: çalışması istenen kod bloğu ;
}
switch içersindeki tamsayı ile , bu tamsayıya karşılık gelen koşula girilir ve istenen kod bloğu çalıştırılır.Kod bloklarından sonra break koymak gerekir aksi takdirde uygun koşulu bulduktan sonraki her koşula girilecektir.Eğer tamsayımız koşullardan hiçbirine uymuyorsa default koşulundaki kod bloğu çalıştırılarak son bulur.
ör-switch-1
public class AylarSwitchTest {
    
    public static void main(String[] args) {
        
        int ay = 8;
        switch (ay) {
            case 1:  System.out.println("Ocak"); break;
            case 2:  System.out.println("Subat"); break;
            case 3:  System.out.println("Mart"); break;
            case 4:  System.out.println("Nisan"); break;
            case 5:  System.out.println("Mayis"); break;
            case 6:  System.out.println("Haziran"); break;
            case 7:  System.out.println("Temmuz"); break;
            case 8:  System.out.println("Agustos"); break;
            case 9:  System.out.println("Eylul"); break;
            case 10: System.out.println("Ekim"); break;
            case 11: System.out.println("Kasim"); break;
            case 12: System.out.println("Aralik"); break;
        }
    }
}
Uygulamanın çıktısı
Agustos
Aynı örneğimizin , break anahtar kelimelerinin kaldırılmış haldeki versiyonu
ör-switch-2

public class AylarSwitchTest {
    
    public static void main(String[] args) {
        
        int ay = 8;
        switch (ay) {
            case 1:  System.out.println("Ocak"); 
            case 2:  System.out.println("Subat"); 
            case 3:  System.out.println("Mart"); 
            case 4:  System.out.println("Nisan"); 
            case 5:  System.out.println("Mayis"); 
            case 6:  System.out.println("Haziran"); 
            case 7:  System.out.println("Temmuz"); 
            case 8:  System.out.println("Agustos"); 
            case 9:  System.out.println("Eylul"); 
            case 10: System.out.println("Ekim"); 
            case 11: System.out.println("Kasim"); 
            case 12: System.out.println("Aralik"); 
        }
    }
}
Uygulamanın çıktısı aşağıdaki gibidir , bu istenmeyen bir durumdur ;
Agustos
Eylul
Ekim
Kasim
Aralik
ör-switch-3
public class AylarSwitchDefaultTest {
 
  public static void main(String[] args) {
 
    int ay = 25;
    switch (ay) {
      case 1: System.out.println("Ocak"); break;
      case 2: System.out.println("Subat"); break;
      case 3: System.out.println("Mart"); break;
      case 4: System.out.println("Nisan"); break;
      case 5: System.out.println("Mayis"); break;
      case 6: System.out.println("Haziran"); break;
      case 7: System.out.println("Temmuz"); break;
      case 8: System.out.println("Agustos"); break;
      case 9: System.out.println("Eylul"); break;
      case 10: System.out.println("Ekim"); break;
      case 11: System.out.println("Kasim"); break;
      case 12: System.out.println("Aralik"); break;
      default: System.out.println("Heyoo ,Aranilan Kosul Bulunamadi !!");
    }
  }
}
Bu örneğimizde istenen durum hiçbir koşula uymadığı için , default koşulundaki kod bloğu çalışmaktadır.
Uygulamanın çıktısı
Heyoo ,Aranilan Kosul Bulunamadi !!

Dallandırma İfadeleri

Java programlama dilinde dalladırma ifadeleri toplam 3 adettir .
· break ifadesi
· continue ifadesi
· return ifadesi
break ifadesi
break ifadesinin iki türlü şekli bulunur , bunlardan biri etiketli (labeled) diğeri ise etiketsiz (unlabeled ) versiyonlardır.Etiketsiz (unlabeled ) break ifadesi versiyonunun , switch ifadelerinde nasıl kullanıldığını görmüştük.Etiketsiz break ifadesi sayesinde , koşul sağlandığında switch ifadesinin sonlanmasını sağlıyorduk. break ifadesini aynı şekilde while , do-while ve for ifadelerinden çıkmak içinde kullanabilirsiniz.
ör-break-1-etiketsiz
public class BreakTest {
        public static void main(String[] args) {
               for ( int i = 0; i < 100; i++ ) {
                       if ( i ==9 ) {// for dongusunu kiriyor
                               break;
                       }
                       System.out.println("i =" +i);
               }
               System.out.println("Donguden cikti");
        } 
}
Normalde 0 dan 99'a kadar dönmesi gereken kod bloğu , i değişkenin 9 değerine gelmesiyle for dönüsünğn dışına çıktı . Uygulamanın çıktısı aşağıdaki gibidir .
i =0
i =1
i =2
i =3
i =4
i =5
i =6
i =7
i =8
Donguden cikti
Etikesiz break ifadeleri en içteki while , do-while , for döngü ifadelerini sona erdirirken , etiketli break ifadeleri etiket(label) hangi döngünün başına konulmuş ise o döngü sistemini sona erdirir.



ör-break-etiketli
public class BreakTestEtiketli {
        public static void main(String[] args) {
 
               kiril : 
               for ( int j = 0 ; j < 10 ; j ++ ) {
 
                       for ( int i = 0; i < 100; i++ ) {
                               if ( i ==9 ) {// for dongusunu kiriyor
                                      break kiril;
                               }
                               System.out.println("i =" +i);
                       }
                       System.out.println("Donguden cikti");
                       System.out.println("j =" +j);
               }
        } 
}
Yukarıdaki örneğimizde etiket kullanarak , daha geniş çaplı bir döngü sisteminden çıkmuş olduk .Uygulamanın çıktısı
i =0
i =1
i =2
i =3
i =4
i =5
i =6
i =7
i =8
continue İfadesi
continue ifadesi döngü içersinde o anki döngü işleminin pas geçilmesini ve bir sonraki döngü işleminin başlamasını sağlayan bir mekanızmadır. continue ifadeleride break ifadeleri gibi iki çeşite ayrılır. Etiketsiz (unlabeled ) continue ve etiketli (labeled) continue. Etiketsiz continue en içdeki döngü içersinde etkili olurken , etiketli (labeled) continue ise başına konulduğu döngü sisteminin etkiler.
ör-continue -etiketsiz
public class ContinueTest {
        public static void main(String[] args) {
               for ( int i = 0; i < 30; i++ ) {
                       if ( i ==9 ) {// for dongusunu kiriyor
                               continue;
                       }
                       System.out.println("i =" +i);
               }
               System.out.println("Donguden cikti");
        } 
}
Uygulamanın çıktısı ;
i =0
i =1
i =2
i =3
i =4
i =5
i =6
i =7
i =8
i =10
i =11
i =12
i =13
i =14
i =15
i =16
i =17
i =18
i =19
i =20
i =21
i =22
i =23
i =24
i =25
i =26
i =27
i =28
i =29
Donguden cikti
Ekran çıktısına dikkat edersek , 9 değerinin olmadığını görürüz . continue ifadesi , break ifadesi gibi döngüleri kırmaz , sadece belli durumlardaki döngü işleminin pas geçilmesini sağlar .
ör-continue-etiketli
public class ContinueTestEtiketli {
        public static void main(String[] args) {
 
               pas : 
               for ( int j = 0 ; j < 6 ; j ++ ) {
 
                       for ( int i = 0; i < 5; i++ ) {
                               if ( i ==3 ) {// for dongusunu kiriyor
                                      continue pas;
                               }
                               System.out.println("i =" +i);
                       }
                       System.out.println("Donguden cikti");
                       System.out.println("j =" +j);
               }
        } 
}
Bu uygulamamızda , pas label ekitini kullanarak , continue işleminin en dışdaki döngüsel sistemden başlamasını sağladık. Uygulamamızın çıktısı;
i =0
i =1
i =2
i =0
i =1
i =2
i =0
i =1
i =2
i =0
i =1
i =2
i =0
i =1
i =2
i =0
i =1
i =2
i değişkeninin her seferinde yeniden 0'dan başladığını ve 2 de kesiltiğini görmekteyiz.Bu işlem toplam 6 kez olmuştur yani en dışdaki döngünün sınırları dahilinde.
return ifadesi
return ifadesini daha evvelden bahsetmistik ama yeni bir hatırlatma fena olmaz . return ifadesinin iki tür kullanım şekli vardır . Birincisi değer döndürmek için -ki metodlardan değerleri böyle geri döndürürüz , ikincisi ise eğer metodun dönüş tipi buna izin veriyorsa (void ise ) herhangi bir taviz vermeden return yazıp metod dan çıkabiliriz.
Bölüm sonu
Bu bölümümüzde Java uygulamalarını yönetmek için gerekli mekanizmaları öğrendik . İlkel tiplere ve obje referanslarının nasıl kullanıldıklarını gördük . Metod çağrımlarında dikkat edilmesi gereken hususları inceledik.
Matematiksel Operatörler kullanarak Java uygulamalarında nasıl aritmetik işlemler yapılabileceği üzerinde tartıştık.İlkel (primitive) tiplerin birbirleri içersinde nasıl dönüştürüldüğünü gördük ve oluşabilecek olan değer kayıplardından yine kodu yazan kişinin kendisinin sorumlu oldugunu söylemiştik .
Javada karşılaştırma operatörleri ("==" , " !=" ..vb ) sıkça kullanılır , özellikle objeleri birbiri ile karşılaştırırken dikkatli olmamız gerektiğini inceledik . Kaydırma (Shift) işlemlerinin nasıl yapıldığını araştırdık.
Sorular :
1. 1'den 100'e kadar olan değerleri ekrana basan bir uygulama yazınız.
2. 100'den 1'e kadar olan değerleri ekrana basan bir uygulama yazınız.
3. ör-obje-atama örneğindeki , Sayi sınıfının i değişekini double tipine çevirerek tekrar yazınız.
4. 1'den 1000'e kadar ilerleyen döngüsel bir ifadede , her 100 değerde bir ,ekrana değer basan bir uygulama yazınız.
5. Tablo-6 daki gösterimlerin her biri için ayrı ayrı , ufak uygulamalar yazınız (toplam 3 adet uygulama).
6. ör-bitwise örneğindeki ,int a= 9 ifadesini , 15 yaparak, uygulamayı tekrardan yazınız ve sonuçlar hakkında yorum belirtiniz .
7. Herhangi iki değer için, tablo 7 dek shift (kaydırma) operatörlerini kullanarak(VE,VEYA,Özel VEYA..) bir uygulama yazınız.
8. Konsoldan girilen değere göre not bilgisini veren (ör-if-else-1) bir uygulama yazınız.
9. Üçlü if -else 'in kullanılışını gösteren bir uygulama yazınız.
10. Kısa Devre olayını bir örnek ile açıklayınız .
11. 8. sorunun , switch ifadesi ile kullanılmış şeklini yazınız .
12. while ifade ile sonsuz bir döngü oluşturan uygulama yazınız.
İç içe geçmiş iki for döngüsünde , en dışdaki döngü 1'den 1000'e kadar saymalı , en içdeki döngü ise 1'den 500'e kadar saymalı. Bu for sistemininde , break (etiketli ,etiketsiz) ve continue(etiketli , etikesiz) ifadelerini gösteren , ayrı ayrı dört uygulama yazınız.

Yorumlar

Bu blogdaki popüler yayınlar

Soru ve Cevaplarla Kompanzasyon

Aktif Güç Nedir,Reaktif Güç Nedir

Sinusoidal AC dalga şekli, Tepe, ortalama, efektif(rms), değer tanımları...