Thursday, September 23, 2010

Labeled Statements

Iyigunler arkedeslar aslinda daha onceki yazilrimde labeled ifadesini gecmistim hatirlayacak olursaniz labeled iki nokta ust uste manasina gelir. Ornek olarak switch olustururken her bir case icin ":" isratei kullanilir.

Ama bu kunuyu ayri bir baslik alitinda yazmamin sebebi break to labeled ve continue to labeled konularinin incelemek ve bu konu ile ilgili uygulama gerceklestirmek oncelile break to labeled ile basliyalim.

Break to Labeled Statement : break ne alama gel;digini oncelikle hatirlayalim.  Donguyu aniden sonlandirmak veya donguyu kirmak icin break komutu kullanilir dongunun bitisinin nerede olacagini bilmedigimiz bir donguyu ancak break komutuyla sonlandirabiliriz Sartlar saglandiginda break komutu devreye girer ve dongu sonlanir. Break ile ilgili kucuk bir uygulama yapalim.

public class BreakTest {
       public static void main(String args[]){
            for (int i = 0; i < 5; i++) {
                    if(i == 2){
                          break;
                    }
                    System.out.println(i+" . deger");
            }
       }
}

//Console Output
 0 . deger
1 . deger

 Gorulduyu gibi sarta for dongusu besdafa donmesi gerekirken i == 2 sartina geldiyinde if icine girdi ve break gorduyu icin for bittirdi. Yada switch konusunu dusunelim case'lerden hangi sart uygun ise o sarta girer ve sartin sonuna break konulirki switch islemi sona ersin uygun sart bulunmus islem yapilmis altaki sartlara bakmaya gerek yok manasinda. Simdide gelelim break to labeled konusuna yukarda gorulduyu gibi break ancak bulungugu blog terkederken break to labeled yontemi ile istenilen blogu terketmesini saglayabiliriz
simdi bu konuyu anlama icin break ve btreak to labeled konusu ile ilgili iki uygulama gerceklestirince konu daha iyi analasilacak.

public class BreakTest {
       public static void main(String args[]) {
              for (int i = 0; i < 5; i++) {
                    System.out.println("i : "+i);
                    for (int j = 0; j < 5; j++) {
                           System.out.println("j : "+j);
                           if (j == 2) {
                                 break;
                           }
                    }
              }
       }
}

//Console Output 
i : 0
j : 0
j : 1
j : 2
 
i : 1
j : 0
j : 1
j : 2
 
i : 2
j : 0
j : 1
j : 2
 
i : 3
j : 0
j : 1
j : 2
 
i : 4
j : 0
j : 1
j : 2

Gorulduyu gibi i =0 icin ilk degeri almis ve j=0,1,2 degerlerinden sonra her seferinde break komutu ile bulundugu dongu terk etmis ve i'nin bir sonraki degerine gecmis yine j=yi gelince terk etmis ve bu olay 5 defa tekrar etmis. Ama dusunun ben istiyorumki j=2 ye gelince tum dongudeki islemler sonlansin iste burada devreye break to labeled konusu giriyor  ayni uygulamayi break to labeled ile yapip tum donguyu terk etmesini saglayacam.

public class BreakTest {
        public static void main(String args[]) {
                //Terk edilmesi istenilen yere
                terket:
                for (int i = 0; i < 5; i++) {
                        System.out.println("i : "+i);
                        for (int j = 0; j < 5; j++) {
                                 System.out.println("j : "+j);
                                 if (j == 2) {
                                       break terket;
                                 }
                        }
                }
        }
}
//Console Output
 i : 0
j : 0
j : 1
j : 2


Gorulduyu gibi i=0 icin dongu basladi ve j=0,1,2 icin calisti ve break gorduyu yerde terk etmesi gereken yeri bildirdiyim icin dongu tamamen sonlandi.

Continue to Labeled Statement :  Bu konuya girmeden once continue ifadesini bir hatirlayalim İşlem yapmadan döngüyü devam ettirmek için ise continue komutunu kullanırız.  Once continue ile ingili bir uygulama yapacam sonrada continue to label ile ilgili bir ugulama yapacam ve bu sayade hem aralarindaki farki hemde continue to ifacesini anlamis olursunuz

public class ContinueTest {
       public static void main(String args[]){
              for (int i = 0; i < 5; i++) {   
                       if(i == 2){
                              continue;
                       }
                       System.out.println("i : "+ i);
              }
      }
}
//Console Output
i : 0
i : 1
i : 3
i : 4
Gorulduyu gibi i=0 icin ekranda gosterdi i=1 icin ekranda gosterdi i=2 icin geldi sarta girdi continue ifadesini gordu ve altaki isleme gelmede for saygacina geri dondu ve i=3 icin ekranda gosterdo i=4 icin ekranda gosterdi i=5 olunca fongu saglamadigi icin donguden cikti. Simdide gelelim continue to labeled islemine ama bunun ile ilgili uygulamayi anlatmadan once bu ifadenin sandece continue ile kullanilinca ne olucagi ile continue to labeled kullanilinca ne gibi bir yarar saglayacagini gosterecegim.

public class ContinueTest {
        public static void main(String args[]) {
               for (int i = 0; i < 5; i++) {
                       System.out.println("i : "+i);
                       for (int j = 0; j < 5; j++) {
                             if (j == 2) {
                                   continue;
                             }
                             System.out.println("j : " + j);
                       }
               }
        }
}
//Console Output
i : 0
j : 0
j : 1
j : 3
j : 4
 
i : 1
j : 0
j : 1
j : 3
j : 4
 
i : 2
j : 0
j : 1
j : 3
j : 4
 
i : 3
j : 0
j : 1
j : 3
j : 4
 
i : 4
j : 0
j : 1
j : 3
j : 4

Gorulduyu gibi i=0,1,2,3,4 degerleri icin j=2 degerine gelinde sadece isteki dongu altaki islemleri yapmadan icteki dongonun basina dondu. Ama ben continue to label kullanarak icteki j=2 her geldiginde istedigim blogtan tekrardan baslamasini saglayabilirim bu degimin uygulamasini yapalim.

public class ContinueTest { 
        public static void main(String args[]) {
                //Tekrardan baslamak istedigim blog yerini belirliyorun
                tekrar:
                for (int i = 0; i < 5; i++) {
                      System.out.println("i : "+i);
                      for (int j = 0; j < 5; j++) {
                            if (j == 2) {
                                    continue tekrar;
                            }
                            System.out.println("j : " + j);
                      }
                }
        }
}
//Console Output
i : 0
j : 0
j : 1
 

i : 1
j : 0
j : 1
 

i : 2
j : 0
j : 1
 

i : 3
j : 0
j : 1
 

i : 4
j : 0
j : 1
 

Gorulduyu i=0,1,2,3,4 degerlari icin j=2 olunca benim tekrar yazdigim yere donup kaldigi yerden isleme devam ediyor

Not : Tabiki bu break to labeled ve continue to labeled sadece for dongusune mahsus birsey degil istenilen blogun terk etmek yada tekrardan basina donmek icin kullanabilirsiniz 

No comments:

Post a Comment