Ehto ja toistolauseet Ehto ja toistolauseet Uutena asiana

  • Slides: 35
Download presentation
Ehto- ja toistolauseet

Ehto- ja toistolauseet

Ehto- ja toistolauseet • Uutena asiana opetellaan ohjelmointilauseet / rakenteet, jotka mahdollistavat: – Päätösten

Ehto- ja toistolauseet • Uutena asiana opetellaan ohjelmointilauseet / rakenteet, jotka mahdollistavat: – Päätösten tekemisen ohjelman suorituksen aikana (esim. kyllä/ei) – Samoja lauseiden toistamisen useammin kuin kerran (silmukassa) • Kirjassa nämä sijaitsevat luvussa 4: – 4. 2 Ehtolauseet – 4. 3 Toistolauseet – 4. 4. Ehto- ja toistolause -esimerkki 2

Missä ollaan? if-ehtolause Muut ehtolauseet while-lause Muut toistolauseet 3

Missä ollaan? if-ehtolause Muut ehtolauseet while-lause Muut toistolauseet 3

Kontrollivirta • Lauseiden suoritusjärjestys metodin sisällä on oletusarvoisesti lineaarinen (ylhäältä alas). Tällaista suoritusjärjestystä kutsutaan

Kontrollivirta • Lauseiden suoritusjärjestys metodin sisällä on oletusarvoisesti lineaarinen (ylhäältä alas). Tällaista suoritusjärjestystä kutsutaan peräkkäisrakenteeksi. • Ehto- ja toistolauseet mahdollistavat valinnan suoritetaanko ohjelmalohko vai ei ja kuinka monta kertaa. • Valinnat perustuvat totuusarvoisiin (boolean) lausekkeisiin (eli ehtoihin), jotka saavat aina arvon true tai false. • Lauseiden suoritusjärjestystä kutsutaan kontrollivirraksi (flow of control). 4

Ehtolauseet • Ehtolause mahdollistaa valinnan suoritetaanko ehtoon liittyvä ohjelmalohko. • Ehtolauseita kutsutaan myös valintalauseiksi

Ehtolauseet • Ehtolause mahdollistaa valinnan suoritetaanko ehtoon liittyvä ohjelmalohko. • Ehtolauseita kutsutaan myös valintalauseiksi (selection statements). • Javan ehtolauseet ovat: – – if-lause if-else –lause if - else if -lause switch-lause. 5

if-lause • if-lauseella on seuraava syntaksi: if on Javan varattu sana ehto on boolean-lauseke,

if-lause • if-lauseella on seuraava syntaksi: if on Javan varattu sana ehto on boolean-lauseke, joka saa aina arvon tosi (true) tai epätosi (false) if( ehto ) { lause 1; lause 2; } Jos ehto on tosi, suoritetaan if-lauseeseen liittyvä ohjelmalohko. Jos ehto on epätosi, Ohjelmalohko jätetään suorittamatta. 6

if-lauseen logiikka ehdon evaluointi true false ohjelmalohko 7

if-lauseen logiikka ehdon evaluointi true false ohjelmalohko 7

Vertailuoperaattorit • Ehtolauseet käyttävät Javan vertailuoperaattoreita, jotka kaikki palauttavat arvon tosi tai epätosi: ==

Vertailuoperaattorit • Ehtolauseet käyttävät Javan vertailuoperaattoreita, jotka kaikki palauttavat arvon tosi tai epätosi: == != < > <= >= yhtäsuuri kuin (matematiikan =) erisuuri kuin pienempi kuin Suurempi kuin pienempi- tai yhtäsuuri kuin suurempi- tai yhtäsuuri kuin • Huomaa ero yhtäsuuruusoperaattorin (==) ja sijoitusoperaattorin välillä (=)! 8

if-lause • Esimerkki if-lauseesta: if (saldo < 0) { System. out. println (”Tilillä ei

if-lause • Esimerkki if-lauseesta: if (saldo < 0) { System. out. println (”Tilillä ei ole katetta!”); } System. out. println(”Valmis. ”); • Ensin tutkitaan ehto : saldo-muuttuja on joko pienempi kuin nolla tai ei. • Jos ehto on tosi, if-lauseeseen liittyvä ohjelmalohko suoritetaan – jos näin ei ole, lohko ohitetaan. • Oli tilanne kumpi tahansa, seuraavaksi tulostetaan merkkijono ”Valmis”. • Katso myös kirjan esimerkki 4. 1. 9

if-lause • Mitä seuraavat lauseet tekevät? if (ylaraja <= 0) { ylaraja = 0;

if-lause • Mitä seuraavat lauseet tekevät? if (ylaraja <= 0) { ylaraja = 0; } Sijoittaa muuttujaan ylaraja arvon nolla, jos muuttujan tämänhetkinen arvo on pienempi tai yhtäsuuri kuin nolla. if (saldo != otot + panot) { tilivirhe = true; } Sijoittaa muuttujaan tilivirhe arvon true, jos saldomuuttujan arvo ei ole sama kuin otot- ja panot-muuttujien summa. • Aritmeettiset operaatiot suoritetaan ennen yhtäsuuruus- ja vertailuoperaatioita. Sulkujen käyttö asian selventämiseksi on kuitenkin aina suositeltavaa! 10

Loogiset operaattorit • Ehtolausekkeet voivat käyttää myös seuraavia loogisia operaattoreita: ! && || NOT

Loogiset operaattorit • Ehtolausekkeet voivat käyttää myös seuraavia loogisia operaattoreita: ! && || NOT (EI) AND (JA) OR (TAI) • Nämä kaikki ottavat vastaan boolean-lausekkeita operandeina ja palauttavat joko arvon tosi (true) tai epätosi (false). • Looginen EI on unaarinen operaattori (toimii yhden operandin kanssa). • Loogiset JA ja looginen TAI ovat binäärisiä operaattoreita (toimivat kahden operandin kanssa). 11

Looginen NOT • NOT-operaatiota kutsutaan myös negaatioksi tai komplementiksi. • Jos operandi a on

Looginen NOT • NOT-operaatiota kutsutaan myös negaatioksi tai komplementiksi. • Jos operandi a on tosi, silloin !a (NOT a) on epätosi. • Jos operandi a on epätosi, silloin !a on tosi. • Tämä voidaan esittää totuusarvotaulukon avulla seuraavasti: a !a true false true 12

Looginen AND ja looginen OR • Looginen AND (JA) lauseke a && b on

Looginen AND ja looginen OR • Looginen AND (JA) lauseke a && b on tosi, jos sekä a että b ovat tosia, muutoin lauseke on epätosi • Looginen OR (TAI) ilmaisu a || b on tosi, jos a on tosi tai b on tosi tai molemmat ovat tosia, muutoin lauseke on epätosi (eli silloin kun a ja b ovat molemmat epätosia) 13

Loogiset operaattorit • Loogisia operaattoreita käyttäen saadaan aikaiseksi turhankin monimutkaisia lausekkeita. if (saldo >

Loogiset operaattorit • Loogisia operaattoreita käyttäen saadaan aikaiseksi turhankin monimutkaisia lausekkeita. if (saldo > otto + 500 && !tilivirhe) { System. out. println (”Rahat riittävät. ”); } • Sulkujen käyttö suoritusjärjestyksen selventämiseksi on aina suositeltavaa! 14

Loogiset operaattorit • Totuusarvotaulukosta nähdään kaikki mahdolliset tilanteet esimerkiksi kahden operandin tilanteessa • Koska

Loogiset operaattorit • Totuusarvotaulukosta nähdään kaikki mahdolliset tilanteet esimerkiksi kahden operandin tilanteessa • Koska && ja || kummallakin on kaksi operandia, on olemassa neljä mahdollista kombinaatiota kullakin ehdolla a ja b a && b a || b true false true true false 15

Totuusarvotaulukko • Minkä tahansa monimutkaisemmankin lausekkeen voi evaluoida totuusarvotaulukon avulla. saldo > otto +

Totuusarvotaulukko • Minkä tahansa monimutkaisemmankin lausekkeen voi evaluoida totuusarvotaulukon avulla. saldo > otto + 500 tilivirhe !tilivirhe saldo > otto + 500 && !tilivirhe true false true false true false 16

Laiska evaluointi • AND- ja OR-operaattorien prosessointi on “laiskaa”. • Jos vasen operandi riittää

Laiska evaluointi • AND- ja OR-operaattorien prosessointi on “laiskaa”. • Jos vasen operandi riittää ratkaisemaan lopputuloksen, oikeaa operandia ei huomioida ollenkaan if (nimi != null && nimi. equals(”Bill”)) { System. out. println (”Terve Bill!"); } • Tästä on hyötyä esim. edellisessä tilanteessa: ohjelma ei kaadu vaikka merkkijonon nimi arvo olisi null. 17

Missä ollaan? if-ehtolause Muut ehtolauseet while-lause Muut toistolauseet 18

Missä ollaan? if-ehtolause Muut ehtolauseet while-lause Muut toistolauseet 18

if-else -lause • else-lause lisätään if-lauseeseen, kun halutaan epätosi vaihtoehdolle erillinen käsittely: if (

if-else -lause • else-lause lisätään if-lauseeseen, kun halutaan epätosi vaihtoehdolle erillinen käsittely: if ( ehto ) { lause 1; } else { lause 2; } • Jos ehto on tosi (true), lause 1 (lohko 1) suoritetaan; jos ehto on epätosi, lause 2 (lohko 2) suoritetaan. • Ensimmäinen tai toinen suoritetaan, mutta ei molempia • Katso myös kirjan esimerkki 4. 2. 19

if-else lauseen logiikka ehto evaluoidaan true lause 1 false lause 2 20

if-else lauseen logiikka ehto evaluoidaan true lause 1 false lause 2 20

If - else-if -lauseet • If – else-if on rakenne, jossa voidaan ottaa huomioon

If - else-if -lauseet • If – else-if on rakenne, jossa voidaan ottaa huomioon useita vaihtoehtoja. if( ehto ) { lause 1; } else if( ehto 2 ) { lause 2; } else if( ehto 3 ) { lause 3; } else { lause 4; } • Else-if osia voidaan kirjoittaa ensimmäisen if-osan jälkeen haluttu määrä • Jokaisella else-if –osalla on oma ehtolausekkeensa. • Loppuun voidaan kirjoittaa else-osa. 21

If - else-if -lauseet • Esimerkki: Tutkitaan mikä maa on kyseessä ja asetetaan mukainen

If - else-if -lauseet • Esimerkki: Tutkitaan mikä maa on kyseessä ja asetetaan mukainen valuutta. if( maa. equals(”Suomi” ) { Valuutta = ”Euro”; } else if( maa. equals(”Ruotsi”) { Valuutta = ”Kruunu”; } else if( maa. equals(”USA”) { Valuutta = ”Dollari”; } else { Valuutta = null; } • Mitä jos muuttujan maa arvo onkin null? • Kirjassa lisäksi esimerkki 4. 3. 22

Missä ollaan? if-ehtolause Muut ehtolauseet while-lause Muut toistolauseet 23

Missä ollaan? if-ehtolause Muut ehtolauseet while-lause Muut toistolauseet 23

Toistolauseet • Toistolauseet mahdollistavat ohjelmalohkon suorittamisen useita kertoja (0 -n). • Käytetään usein nimityksiä

Toistolauseet • Toistolauseet mahdollistavat ohjelmalohkon suorittamisen useita kertoja (0 -n). • Käytetään usein nimityksiä silmukka tai luuppi. • Myös toistolauseita kontrolloidaan booleanlausekkeiden avulla. • Javassa on kolmenlaisia toistolauseita: – while-lause – do-while -lause – for-lause 24

while-lause • while-lauseella on seuraava syntaksi: while ( ehto ) { lauseet; } •

while-lause • while-lauseella on seuraava syntaksi: while ( ehto ) { lauseet; } • Jos ehto on tosi (true), lauseet (ohjelmalohko) suoritetaan • Lauseiden suorittamisen jälkeen ehto evaluoidaan uudestaan, ja jos ehto on edelleen tosi, lauseet suoritetaan taas. • Lauseita suoritetaan toistuvasti niin kauan kunnes ehdosta tulee epätosi (false). 25

while-lauseen logiikka ehdon evaluointi true false lauseet 26

while-lauseen logiikka ehdon evaluointi true false lauseet 26

while-lause • Esimerkki while-lauseesta: Scanner scan = new Scanner(System. in); int luku = scan.

while-lause • Esimerkki while-lauseesta: Scanner scan = new Scanner(System. in); int luku = scan. next. Int(); while (luku > 0) { System. out. println(luku); luku = scan. next. Int(); } • Jos while-lauseen ehto on heti alussa epätosi, ei lauseeseen liittyvää ohjelmalohkoa suoriteta kertaakaan. • Tarkastellaan kirjan esimerkkiä 4. 5. 27

Ikuiset silmukat • while-silmukan ohjelmalohkossa on pakko jossain vaiheessa tehdä ehdosta falsearvoinen. • Jos

Ikuiset silmukat • while-silmukan ohjelmalohkossa on pakko jossain vaiheessa tehdä ehdosta falsearvoinen. • Jos näin ei käy, suoritetaan silmukkaa ikuisesti. • Tämä on yleinen looginen virhe ohjelmansuunnittelussa / toteutuksessa. 28

Ikuiset silmukat • Esimerkki ikuisesta silmukasta eli “ikiloopista”: int laskuri = 1; while (laskuri

Ikuiset silmukat • Esimerkki ikuisesta silmukasta eli “ikiloopista”: int laskuri = 1; while (laskuri < 100) { System. out. println(laskuri); laskuri = laskuri - 1; } 29

Sisäkkäiset silmukat • Silmukoita voidaan kirjoittaa useita sisäkkäin, eli silmukan ohjelmalohko voi sisältää toisen

Sisäkkäiset silmukat • Silmukoita voidaan kirjoittaa useita sisäkkäin, eli silmukan ohjelmalohko voi sisältää toisen silmukan. int ulompi = 10; while (ulompi > 0) { int sisempi = 10; while (sisempi > 0) { System. out. println(”Sisempi”); sisempi = sisempi - 1; } System. out. println(”Ulompi”); ulompi = ulompi - 1; } 30

Missä ollaan? if-ehtolause Muut ehtolauseet while-lause Muut toistolauseet 31

Missä ollaan? if-ehtolause Muut ehtolauseet while-lause Muut toistolauseet 31

do-while -lause • do-while -lauseella on seuraava syntaksi: do { lauseet; } while (

do-while -lause • do-while -lauseella on seuraava syntaksi: do { lauseet; } while ( ehto ); • Lauseet (ohjelmalohko) suoritetaan ensin kertaalleen, sitten ehto evaluoidaan. • Lauseet suoritetaan toistuvasti kunnes ehdosta tulee epätosi (false). 32

do-while -lauseen logiikka lauseet true ehdon evaluointi false 33

do-while -lauseen logiikka lauseet true ehdon evaluointi false 33

do-while -lause • Esimerkki do-while -lauseesta: boolean totuus = false; do { System. out.

do-while -lause • Esimerkki do-while -lauseesta: boolean totuus = false; do { System. out. println(”suoritus”); } while (totuus == true); • Kuinka monta kertaa yo esimerkin tulostuslause suoritetaan? • Katso myös kirjan esimerkki 4. 6. 34

while- ja do-while –lauseiden vertailu while silmukka do silmukka lauseet ehdon evaluointi true lauseet

while- ja do-while –lauseiden vertailu while silmukka do silmukka lauseet ehdon evaluointi true lauseet true false ehdon evaluointi false 35