5. Bölüm Akış Kontrolü

Embed Size (px)

Citation preview

  • 8/7/2019 5. Blm Ak Kontrol

    1/37

    Akn Kaldrolu

    Java le Nesne Merkezli Programlama

    www.javaturk.orgMart 2011

    http://www.javaturk.org/http://www.javaturk.org/
  • 8/7/2019 5. Blm Ak Kontrol

    2/37

    Ak Kontrol

    Nesne-merkezli olsun olmasn her programlama dilindeak kontrol etmeyi salayan ifadeler vardr.

    Edsger Dijkstraya gre en temel 3 kontrol yaps unlardr:

    Ardllama (concatenation)

    Seme/karar verme (selection)

    Tekrarlama (repetation, looping)

    2www.javaturk.org

  • 8/7/2019 5. Blm Ak Kontrol

    3/37

    Kontrol fadeleri

    Diller, ifadelerin ardl olarak almalarn tabii olaraksalarlar.

    Geri kalan kontrol yaplar ise zetle unlardr:

    3www.javaturk.org

    fade Tipi Yap

    Tekrarlama while, do-while, for

    Karar verme ve seme if, if-else, if-else if, switch

    Dallanma break, continue, returnSrad durum try-catch-finally, throw

  • 8/7/2019 5. Blm Ak Kontrol

    4/37

    while

    while, mantksal ifade doru olduu mddete,kendisinden sonra gelen ifade ya da ifade bloununalmasn salar.

    4www.javaturk.org

    while (mantksal ifade)ifade

    ya da

    while (mantksal ifade) {ifade(ler)

    }

  • 8/7/2019 5. Blm Ak Kontrol

    5/37

    WhileDemo

    5www.javaturk.org

    public class WhileDemo {

    public static void main(String[] arg){

    double r = 0.0d;while(r < 0.80d) {

    r = Math.random();

    System.out.println(r);

    }

    }}

  • 8/7/2019 5. Blm Ak Kontrol

    6/37

    do-while

    do-while, dodan sonra gelen ifade ya da ifadeleri, whileinmantksal ifadesi doru olduu mddete altrr.

    whiledan fark, ifade blounun en az bir kere almasdr.

    whilesatrndaki ";" unutmayn.

    6www.javaturk.org

    do

    ifade

    while (mantksal ifade);

    ya da

    do{

    ifade(ler)

    }

    while (mantksal ifade);

  • 8/7/2019 5. Blm Ak Kontrol

    7/37

    DoWhileDemo

    7www.javaturk.org

    public class DoWhileDemo {

    public static void main(String[] arg){

    double r = 0d;

    do {r = Math.random();

    System.out.println(r);

    }while(r < 0.8d);

    }}

  • 8/7/2019 5. Blm Ak Kontrol

    8/37

    for

    for, ifadeyi ya da ifade blounu, balang, biti ve deiimdeerlerinin merkezi olarak yneterek, tekrarl olarakaltrmakta kullanlr.

    lk deer atama, biti art ve deiim zorunlu deildir ama

    for parantezinde iki tane ";" bulunmaldr.

    8www.javaturk.org

    for (ilk deer atama; biti art; deiim)

    ifade

    ya da

    for (ilk deer atama; biti art; deiim){

    ifade(ler)

    }

  • 8/7/2019 5. Blm Ak Kontrol

    9/37

    ListCharacters and ForDemo

    9www.javaturk.org

  • 8/7/2019 5. Blm Ak Kontrol

    10/37

    if

    f, bir mantksal ifadeye bal olarakkarar verme ve seme iinkullanlr.Mantksal ifade doru ise ifade ya da ifade blou alr yanlsa

    almaz. Her iki halde de ak, ififadesi ya da bloundan sonraki ifadeden

    devam eder.

    10www.javaturk.org

    if (mantksal ifade)

    ifade

    ya da

    if (mantksal ifade) {

    ifade(ler)

    }

  • 8/7/2019 5. Blm Ak Kontrol

    11/37

    ListCharactersWithIf

    11www.javaturk.org

  • 8/7/2019 5. Blm Ak Kontrol

    12/37

    if-else

    ifin mantksal ifadesi doru olmadnda da alacak birblok varsa, elsekullanlr.

    12www.javaturk.org

    if (mantksal ifade)

    ifadeelse

    ifade

    ya da

    if (mantksal ifade){

    ifade(ler)

    }else{

    ifade(ler)

    }

  • 8/7/2019 5. Blm Ak Kontrol

    13/37

    if-else if-else

    Birden fazla arta bal olarak alacak alternatif ifadelerise oklu if - else if - else ile ifade edilebilir.

    Sondaki elsezorunlu deildir.

    13www.javaturk.org

    if (mantksal ifade)ifade

    else if (mantksal ifade)

    ifade

    ...

    else if (mantksal ifade)

    ifade

    else

    ifade

  • 8/7/2019 5. Blm Ak Kontrol

    14/37

    IfElseDemo

    14www.javaturk.org

  • 8/7/2019 5. Blm Ak Kontrol

    15/37

    l if-else Operatr : ?

    l koullu (ternaryconditional) operatr, "?:" 3 taneilenen alan tek operatrdr.

    Mantksal ifade doru ise ifade1deilse ifade2 alr:

    15www.javaturk.org

    Mantksal ifade ? ifade1 : ifade2

    double random = Math.random();

    String para = random > 0.5 ? "Tura" : "Yaz";

    if(random > 0.5)

    para = "Tura";

    else

    para = "Yaz";

  • 8/7/2019 5. Blm Ak Kontrol

    16/37

    TernaryOperatorDemo

    16www.javaturk.org

  • 8/7/2019 5. Blm Ak Kontrol

    17/37

    Cmle Problemi

    Aadaki gibi bir durumla karlatnz m?

    17www.javaturk.org

    if(true)

    int u = 7; // Hata

    for (int j = 0; j < 10; j++)

    int k = j; // Hata

    Problem, blok kullanlmadnda, ifve bir deikentanmnn tek bir cmlede (statement) ifade edilmesidir,

    Aslnda deiken tanm zaten tek bir cmledir ve buekilde bir if(ya da for, while ve do-while) cmlesinin iindekullanlmamaldr.

    zm ya blok kullanmak ya da deikeni ncedentantmaktr.

  • 8/7/2019 5. Blm Ak Kontrol

    18/37

    StatementProblem.java

    18www.javaturk.org

  • 8/7/2019 5. Blm Ak Kontrol

    19/37

    == Operatr (Tekrar)

    Eitlik kyaslamak iin "==" operatrn kullann.

    ifya da whilegibi yaplarda yanllkla eitlik kyaslamasiin "==" yerine atama operatr "=" yazmak, yaygn birhatadr.

    19www.javaturk.org

  • 8/7/2019 5. Blm Ak Kontrol

    20/37

    switch

    switch, if-else if-else yapsnn int olan ifadeler iin dahatoplu bir eklidir.

    Bir int sonucu veren int-ifade, caselerdeki hangi ifadeyeeitse ondan sonra gelen blok altrlr.

    Eer hi birine eit deilse defaultun ifadeleri alr.

    20www.javaturk.org

    switch(int-ifade){

    case: sabite1 ifade(ler)

    case: sabite2 ifade(ler)

    . . .

    default: ifade(ler)

    }

  • 8/7/2019 5. Blm Ak Kontrol

    21/37

    SwitchDemo

    21www.javaturk.org

  • 8/7/2019 5. Blm Ak Kontrol

    22/37

    Baz Noktalar I

    switchin ifadesi byte, short, char ya da intolmaldr.

    Bu durumun Java 7de daha rahat hale getirilmesi szkonusudur.

    caseden sonraki deerler de yukardaki tipten ve ancaksabite olabilir,

    Deiken kullanlrsa finalolmaldr.

    Hi bir iki casesabitesi ayn olamaz.

    22www.javaturk.org

  • 8/7/2019 5. Blm Ak Kontrol

    23/37

    Baz Noktalar II

    fadenin deerine eit bir sabiteye sahip olan casein ifadeblou bir break grnceye kadar alr.

    defaultifadesi zorunlu deildir ve en fazla bir tane olabilir.

    defaultifadesinin ya da dier caseifadelerinin sras nemlideildir.

    23www.javaturk.org

  • 8/7/2019 5. Blm Ak Kontrol

    24/37

    break ve continue

    break ve continue, birbirlerine benzer iki tekrarl yaplardakullanlan kontrol yapsdr.

    Etiketli ve etiketsiz olmak zere 2 hali vardr.

    break, switch, for, while ve do-while iinde, continue ise

    sadece for, while ve do-whileiinde kullanlr, aksi taktirdederleme zaman hatas oluur.

    Etiketsiz hallerinde

    breakiinde bulunduu tekrar yapsn tamamen krar ve ak,tekrar blounu takip eden ifadeden devam eder.

    continue ise bulunduu tekrar yapsn sadece o adm iinkrar ve ak tekrar blounun bir sonraki admndan devameder.

    24www.javaturk.org

  • 8/7/2019 5. Blm Ak Kontrol

    25/37

    BreakDemo.java ve Continue.java

    25www.javaturk.org

  • 8/7/2019 5. Blm Ak Kontrol

    26/37

    Etiketli break ve continue

    Eer i ie birden fazla blok var ve break ya da continue,iteki bloklardan birindeyse, daha darda olan bloukrmann yolu etiket(label) kullanmaktr:

    Etiket, dtaki bloklardan birini iaretler ve breakkullanldnda ak, etiketin iaretledii bloktan sonra gelenifadeden devam eder.

    continuekullanldnda ise, etiketin iaretledii tekraryapsnn o adm krlr ve ak bir sonraki admdan devameder.

    26www.javaturk.org

  • 8/7/2019 5. Blm Ak Kontrol

    27/37

    BreakAndContinueWithLabel.java

    Aadaki durumlarda programn nasl davranacanbulmaya aln ve sonra da deneyin:

    break search;

    break;

    continue search;

    continue;

    27www.javaturk.org

  • 8/7/2019 5. Blm Ak Kontrol

    28/37

    return

    return, bir metottan, o metotun arld ortama dnyapmak iin kullanlr.

    Metotun mainolmas durumunda bu JVMin kmas anlamna gelir.

    ki formu vardr:

    Metot bir deer dndryorsa, deerin tipi ile metotun dn tipi,uyumlu olmaldr,

    Metot bir deer dndrmyorsa returne gerek yoktur amagerekirse dn deersiz olarak kullanlabilir.

    28www.javaturk.org

    return maas;

    ya da

    return;

  • 8/7/2019 5. Blm Ak Kontrol

    29/37

    ReturnDemo.java

    29www.javaturk.org

  • 8/7/2019 5. Blm Ak Kontrol

    30/37

    Eriilemeyen Kod

    Java, eriilemeyen koda (unreachable code) izin vermez.Dolaysyla returnden sonra kod olmamaldr.

    Sonsuz dngler de zaman zaman eriilemeyen kodparalarna sebep olabilir.

    30www.javaturk.org

    while(true)

    System.out.println("Selam");

    int i = 5; // Unreachable code!

    ya da

    while(false)

    System.out.println("Selam");

    // Unreachable code!

  • 8/7/2019 5. Blm Ak Kontrol

    31/37

    UnreachableCode.java

    31www.javaturk.org

  • 8/7/2019 5. Blm Ak Kontrol

    32/37

    Srad Durum Ynetimi

    Javada srad durum ynetimi de ak kontrolu ierir. leride ayr bir blmde ele alnacaktr.

    32www.javaturk.org

    try {

    ifadeler

    } catch (SradDurumTipi nesne) {

    ifade(ler)

    } finally {

    ifade(ler)

    }

  • 8/7/2019 5. Blm Ak Kontrol

    33/37

    Javaa goto Var M?

    goto, Javada henz bir anlam ve kullanm olmayan amaileride olabilir diye saklanan bir anahtar kelimedir.

    Klasik kullanyla goto, programlar yapsal olmaktan

    karmakla eletirilmiti,

    Edsger Dijkstra, 1968de nl "Goto Considered Harmful"makalesini yaynlad .

    33www.javaturk.org

  • 8/7/2019 5. Blm Ak Kontrol

    34/37

    MonteCarloPI.java

    34www.javaturk.org

  • 8/7/2019 5. Blm Ak Kontrol

    35/37

    zet

    Bu blmde ak kontrolnde kullanlan yaplar grdk.

    Ayrca eriilemeyen cmleler ve gotodan bahsettik.

    Bu blm ile birlikte artk nesne-merkezli olmasa daprosedrel Java programlarn byk lde yazabilirsiniz.

    Algoritmik yaplar bu blm iin gzel rnek olutururlar.

    35www.javaturk.org

    fade Tipi Yap

    Tekrarlama while, do-while, for

    Karar verme ve seme if, if-else, if-else if, switch

    Dallanma break, continue, return

    Srad durum Try-catch-finally, throw

  • 8/7/2019 5. Blm Ak Kontrol

    36/37

    www.javaturk.org36

  • 8/7/2019 5. Blm Ak Kontrol

    37/37

    Uygulamalar

    2. dereceden ax^2+bx+c = 0 eklindeki bir denkleminkklerini hesaplayan bir program yazn.

    Girilen bir saynn asal olup olmadn belirleyen bir

    program yazn.

    Girilen bir sayya kadar ka tane asal say olduunu

    hesaplayan bir program yazn.