Upload
akin-kaldiroglu
View
251
Download
0
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.