6 Ocak 2015 Salı

Döngüler

      Bugünkü anlatacağımız konu döngüler. Hepimizin bildiği bir konu  fakat biz burada gözden kaçan veya ince ayarları üzerinde durmaya çalışacağız daha çok. Bu nedenle fazla uzatmadan koda geçelim.

public static void main(String[] args) {
int x = 1;
if (x == 3) { //bu değeri sağlamaz , sağlasa diğer else/else if gitmez
}
else if (x < 4) { //bu koşul sağlar bu nedenle else/else if gitmez
System.out.println("<4");
}
else if (x < 2) { //koşul doğru ilk else if girdiği için çıktı vermez
System.out.println("<2");
}
   if (x < 5) { //if i her koşulda kontrol eder, doğru olduğu için girer
System.out.println("<5");
}
 else {      //hiç bir koşul sağlanmazsa gelir
                        System.out.println("x tüm bunlar dışında");
                }
  /*else if(x<6) {      elseden sonra else if gelmez,fakat if gelebilir
                        System.out.println("<6");
                }*/
}

 Kodu yorum satırlarıyla elimizden geldiğince açıklamaya çalıştık. Şimdi de switch case yapısına bakalım

public static void main(String[] args) {
int x = 1;
final int a=3;
                int b=2;
                long y=2;

switch (x) {
                        //x byte,int,short,byte ve Wrapperları olabilir !!
                        //x yerine y yazarsak hata verir. Long double float olmaz
case 1:
System.out.println("1 secenek aktif");
//break olmadığı için break görünceye akdar devam eder.
                 
case 2: //2 yerine b yazamayız, final tanımlanması olmalı
System.out.println("2 secenek aktif");
break;//break olmasa seçenek 3 de aktif olacaktı
                 
                default: // 1,2,3 dışındaki seçeneklerde aktif olur
                         //default en sonda olmak zorunda değildir
System.out.println(" default aktif");
                 
case a:
System.out.println("3 secenek aktif");
break;

}
}
Kodu yine yorum satırlarıyla açıklamaya çalıştık. Bir kaç ince noktaya da değinmeye çalıştık. Şimdi do while ile while döngülerine kısaca bakalım.

public static void main(String[] args) {
int x = 5;
do{
                    System.out.println("dongu icerisi");
                    //while döngüsü olsa buraya girmezdi
                    //fakat do while hatalı bile olsa bir kere çalışır
                    }
                while (x > 5) ;
System.out.println("dongu disi");

}
Şimdi ise eski ve yeni for döngüsüne bakalım ..

int a[] = { 1, 2, 3, 4 };
for (int x = 0; x < a.length; x++) {
    System.out.println(a[x]);
}

//yeni diye tabir ettiğim for döngüsü
for(int n:a){
    System.out.println(n);
}

2 for arasındaki farka bakalım biraz isterseniz. 1.döngü sayısını kesin olarak bildiğimiz yerlerde kullanabiliriz, 2.döngüyü ise daha çok array,koleksiyon işlemlerinde kullanıyoruz. İkisi de birbrinin işi yaptığı halde geliştirilmiş for bazen daha rahat olabilir fakat eski forun kendine göre önemli avantajları elbet vardır. Şimdi eski forun kullanımı ile ilgili bir kaç for döngüsü yazalım..

for(;;); bu kullanım doğrudur , for sonsuza kadar devam eder.
for(int i=0;i<3;System.out.print("aa"),i++);//çıktısı aa aa aa olur
int y,x;for(x=1,y=5; x>5; x++,y-- );
// 2seçenek hariç 1 ve 3 virgül ile farklı değişkenler kullanılabilir
for(int x=1,y=5; x>5,y<2; x++,y-- ); 
//burada hem int x hem y<2'den dolayı hata verir.

Son olarak geliştirilmiş for ile ilgili bir örnek verelim
class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}

public class TestAnimal {
public static void main(String[] args) {
Animal[] animalArray = { new Dog(), new Cat(), new Cat() };
Dog[] dogArray = { new Dog(), new Dog(), new Dog() };

for (Animal d : animalArray);
// for (Dog d2 : animalArray) ; ISA'ya uygun değil. ERROR
                for (Animal d1 : dogArray);
for (Dog d3 : dogArray) ;
}
}
Şimdi de break ve continue keywordlerine bakıp konuyu bitirelim

public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
                            continue;//çift sayıları atlıyor
                            //continue olmasa çıktı 123456 olacaktı
}

if (i == 7) {
break;//7yi bulduğu an döngü sonlanıyor
                                //continue olsa break olmasa 13579 olacaktı
}
System.out.println("i:" + i);
}
}
// 1 3 5

Kaynakça
http://www.injavawetrust.com/pure-java-43-flow-control-01/
http://www.injavawetrust.com/pure-java-44-flow-control-02/
http://www.injavawetrust.com/pure-java-45-loops/
http://www.injavawetrust.com/pure-java-46-break-continue/

















Hiç yorum yok:

Yorum Gönder