Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Ehto- ja toistolausekkeet

Samankaltaiset esitykset


Esitys aiheesta: "Ehto- ja toistolausekkeet"— Esityksen transkriptio:

1 Ehto- ja toistolausekkeet

2 Ehto- ja toistolausekkeet
Seuraavaksi tutkimme ohjelmointilausekkeita / rakenteita, jotka mahdollistavat meille: Päätösten tekemisen ohjelman suorituksen aikana (esim. kyllä/ei päätös) Toistaa käskyjä silmukassa (loopissa) Kappale 4 keskittyy seuraaviin: boolean ilmaisut ehtolauseet tiedon vertailu toistolauseet iteraattorit

3 Missä ollaan? if lauseet ja ehdot Muut ehtolausekkeet Tiedon vertailu
while lause Iteraattorit Muut toistolauseet

4 Kontrollivirta Jos ei muuta määritetä lauseiden suoritusjärjestys metodin sisällä on lineaarinen (ylhäältä alas): lauseke toisensa jälkeen Tietyt ohjelmointilausekkeet mahdollistavat meille: Päättää, jos tietty lauseke suoritetaan vai ei Suorittaa lause uudelleen ja uudelleen, toistuvasti Nämä päätökset perustuvat boolean lausekkeisiin (tai ehtoihin) jotka evaluoituvat true tai false arvoihin Lauseiden suoritusjärjestystä kutsutaan kontrollivirraksi (flow of control)

5 Ehtolausekkeet Ehtolause mahdollistaa meille valinnanmahdollisuuden koskien sitä, mikä käsky suoritetaan seuraavaksi Ehtolauseita kutsutaan välillä valintalauseiksi (selection statements) Ehtolauseet antavat meille voiman tehdä perutavaalaatua olevia päätöksiä Javan ehtolauseet ovat: if lause if-else lause switch lause

6 if lause if lauseella on seuraava syntaksi: ehto pitää olla
boolean lause. Sen pitää evaluoitua joko todeksi tai epätodeksi. if on Javan varattu sana if ( ehto ) käsky; Jos ehto on tosi, käsky suoritetaan. Jos se on epätosi, käskyn yli hypätään.

7 if-lauseen logiikka ehdon evaluointi false käsky true

8 Boolean lauseet Ehtolauseet käyttävät usein Javan yhtäsuurus tai vertailuoperaattoreita, jotka kaikki palauttavat boolean arvoja: == yhtäsuurikuin (matematiikan =) != erisuurikuin < pienempikuin > suurempikuin <= pienempi- tai yhtäsuurikuin >= suurempi- tai yhtäsuurikuin Huomaa ero yhtäsuuruusoperaattorin (==) ja sijoitusoperaattorin välillä (=)

9 if lause Esimerkki if lauseesta: if (sum > MAX) delta = sum - MAX;
System.out.println (“Summa on " + sum); Ensin ehto evaluoidaan - sum-muuttuja on joko suurempi kuin MAX-muutujan tai ei ole Jos ehto on tosi, sijoitusoperaatio suoritetaan – jos näin ei ole, sijoitusoperaatio ohitetaan Oli tilanne kumpi tahansa, kutsu println metodin suorittamiseksi ajetaan seuraavaksi

10 Sisentäminen (tab->space)
Lause(et), jota if-lause kontrolloin sisennetään ilmentämään tätä suhdetta Konsistentti sisentämistyyli tekee ohjelmasta helpomman lukea ja ymmärtää Vaikka asialla ei ole väliä kääntäjälle, oikeas sisentäminen on äärettömän tärkeää "Always code as if the person who ends up maintaining your code will be a violent psychopath who knows where you live." -- Martin Golding

11 if lause Mitä seuraavat lauseet tekevät?
if (top >= MAXIMUM) top = 0; Asettaa top muuttujaan nollaksi jos tämänhetkinen arvo top muuttujassa on suurempi tai yhtäsuurikuin MAXIMUM if (total != stock + warehouse) inventoryError = true; Asettaa error-lipun todeksi, jos total muuttujan arvo ei ole sama kuin stock ja warehouse muuttujien summa Aritmeettisen operaattorin presedenssi on suurempi kuin yhtäsuuruus- ja vertailuoperaattoreiden

12 Loogiset operaattorit
Boolean lauseet voivat käyttää myös seuraavia loogisia operaattoreita: ! Looginen EI (NOT) && Looginen JA (AND) || Looginen TAI (OR) Nämä kaikki ottavat vastaan boolean operandeja ja palauttavat boolean tuloksia Looginen EI on unaarinen operaattori (se toimii yhden operandin kanssa) Loogiset JA ja looginen TAI ovat binaarisiä operaattoreita (toimivat kahden operaattorin kanssa)

13 Looginen NOT loogista NOT operaatiota kutsutaan myös loogiseksi negaatioksi tai loogiseksi komplementiksi (vrt. komplementtikulma) Jos joku boolean ehto a on tosi, silloin !a on epätosi; jos a on epätosi, silloin!a on tosi Loogiset ilmaisut voidaan esittää totuusarvotaulukon avulla a !a Tosi Epätosi

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

15 Loogiset operaattorit
Ilmaisut, jotka käyttävät loogisia operaattoreita voivat muodostaa monimutkaisia lausekkeita if (total < MAX+5 && !found) System.out.println ("Processing…"); Kaikilla loogisilla operaattoreilla on alheisempi presedenssi kuin vertailuoperaattoreilla Loogisella NOT:lla on korkeampi presedenssi kuin loogisella AND:lla ja loogisella OR:lla

16 Loogiset operaattorit
Totuusarvotaulukko näyttää kaikki mahdolliset tosi- epätositilanteet esim. kahden operandin tilanteessa Koska && ja ||:lla kummallakin on kaksi operandia, on olemassa neljä mahdollista kombinaatiota kullakin ehdolla a ja b a b a && b a || b true false

17 Boolean lauseet Minkä tahansa monimutkaisemmankin lauseen voi evaluoida totuusarvotaulukon avulla (opiskelija menee helposti sekaisin, jos tarkistamista ei suoriteta totuusarvotaulukon avulla) total < MAX found !found total < MAX && !found false true

18 Laiska evaluointi (short cirquit, lazy,…)
Loogisen AND:n ja loogisen OR:n prosessointi on ns. “laiskaa” Jos vasen operaattori on tarpeeksi tuloksen määrittämiseen (lähinnä || tilanne, miten?), oikeaa operandia ei huomioida enää mitenkään (ollenkaan) if (count != 0 && total/count > MAX) System.out.println ("Testing…"); Monimutkaisemmissa lauseissa voi helposti tulla ongelmia, && ja || menevät opiskelijalla helposti sekaisin (“tuli laitettua jostain syystä ||, kun piti olla && tai toisinpäin…”). Käytä monimutkaisia lauseita, jotka ovat short cirquit tyyppisiä varovasti.

19 Missä ollaan? if lauseet ja ehdot Muut ehtolausekkeet Tiedon vertailu
while lause Iteraattorit Muut toistolauseet

20 if-else lause else lause voidaan lisätä if lauseeseen, kun halutaan tehdä if-else lause (hyvä ohjelmointitapa, vs. “tyhmät” ohjelmanne käyttäjät) if ( ehto ) lause1; else lause2; Jos ehto on tosi (true), lause1 suoritetaan; jos ehto on epätosi, lause2 suoritetaan Ensimmäinen tai toinen suoritetaan, mutta ei molempia

21 if-else lauseen logiikka
ehto evaluoidaan false lause2 lause1 true

22 Coin luokka Seuraavaksi tutkimme luokkaa, joka esittää kolikkoa (joka voidaan heittää) -> kruuna vai laava Instanssitietoa (attribuutteja) käytetään ilmoittamaan kumpi kolikon puoli (kruuna tai laava) on sillähetkellä näkyvissä

23 Lisää sisennyksestä Huomaa, että sisennykset ovat ihmistä varten: tietokone ignoroi kaikki sisennyksesi ja voit saada ongelmia {}-sulkeiden puuttumisen vuoksi: if (total > MAX) System.out.println ("Error!!"); errorCount++; Huolimatta siitä, miten sisennyksien perusteella koodin olisi haluttu toimiva, inkrementointi tapahtuu jokatapauksessa: oli ehto sitten tosi tai epätosi

24 Lauseblokit Useita ohjelmarivejä voidaan yhdistää kirjoittamalla lauseblokkeja, jonka alkuun laitetaan avaava ja loppuun sulkeva aaltosulku Lauseblokkia voidaan käyttää missätahansa on ohjelmarivejä (lauseblokki voi olla tyhjäkin, mutta siinä ei ole paljonkaan järkeä) if (total > MAX) { System.out.println("Error!!"); errorCount++; }

25 Lauseblokit if-else rakenne, if osuus, else osuus, tai molemmat, voivat aloittaa lauseblokin if (total > MAX) { System.out.println("Error!!"); errorCount++; } else { System.out.println("Total: " + total); current = total*2;

26 Ehto-operaattori Javassa on ehto-operaattori, joka käyttää boolean ehtoa päättääkseen kumpi kahdesta mahdollisesta lauseesta evaluoidaan Ehto-operaattorin syntaksi on: ehto ? lause1 : lause2 Jos ehto on tosi, lause1 evaluoidaan; jos se on epätösi, lause2 evaluoidaan Koko ehto-operaattorin arvo on sama kuin valitun lauseen loppuarvo

27 Ehto-operaattori Ehto-operaattori on sama kuin if-else lause, paitsi että se on operaatio, joka palauttaa arvon Esimerkiksi: larger = ((num1 > num2) ? num1 : num2); Jos num1 on suurempikuin num2, silloin num1 sijoitetaan larger muuttujaan; muussatapauksessa, num2 sijoitetaan larger muuttujaan Ehto-operaattori on tertiaarinen, koska se vaatii kolme operandia (vertaa unaarinen, binaarinen)

28 Ehto-operaattori Toinen esimerkki:
System.out.println (“Vaihtorahasi on " + count + ((count == 1) ? “Euro" : “Euroa")); Jos count on 1, silloin “Euro" tulostetaan Jos count on mitätahansa muuta kuin 1, silloin “Euroa” tulostetaan (monikkomuoto)

29 Sisäkkäiset if-lauseet
Lause, joka suoritetaan if- tai else-lauseen seurauksena voi olla toinen if-lause Näitä kutsutaan sisäkkäisiksi if-lauseiksi else lause saa parikseen viimeisen ei-mätsätyn if:n (sisennyksillä ei ole väliä. Kokeile textpadin ctrl-n toimiston aaltosulun vastaparin löytämiseksi) Aaltosulkuja voidaan käyttää määrittämään minkä if-lauseen parina else-lause toimii

30 switch lause switch lause mahdollistaa toisen tavan päättää mikä lause suoritetaan seuraavaksi switch lause evaluoi ehtolauseen, sitten yrittää mätsätä tulosta yhteen erityisistä caseista Jokaisella casella on arvo ja lista lauseita, jotka ko. tapauksessa suoritetaan Kontrolli hyppää ko. lauseen suorituksessa sille riville missä ensimmäisenä mätsää ko. casen arvo ja vertailumuuttujan arvo

31 The switch Statement Yleinen switch lauseen syntaksi on: switch
ja case ovat varattuja sanoja switch ( ehto ) { case arvo1 : lause-lista1 case arvo2 : lause-lista2 case arvo3 : lause-lista3 case ... } Jos ehto mätsää arvon arvo2, kontrolli hyppää sinne

32 switch lause Usein break lausetta (lue: lähes aina) käytetään casen lauserivin viimeisenä rivinä break lauseesta seuraa kontrollin siirtyminen switch lauserakenteen loppuun Jos break lausetta ei käytetä, kontrolli siirtyy vain järjestyksessä seuraavaan caseen switch-case rakenteessa Joskus tämä voi olla haluttua, mutta usein haluamme suorittaa vain tiettyyn caseen kuuluvat lauseet

33 switch lause Esimerkki switch lauseesta: switch (option) { case 'A':
aCount++; break; case 'B': bCount++; case 'C': cCount++; }

34 switch lause switch lauseella voi olla optionaalinen defauls case (vertaa if-silmukan else-osaan…) Default casella ei ole siihen liittyvää arvoa (pivot) ja default case tehdään yksinkertaisesti varatulla sanalla default Jos default case on tehty, kontrolli siisrtyy siihen mikäli mikään muu case tapaus ei mätsää muuttujan arvoa Jos default casea ei ole, ja mikään arvo ei sovi, kontrolli putoaalauseen läpi switchin jälkeen

35 switch lause Ehdon vasemman operandin switch lauseessa täytyy olla kokonaislukutyyppiä, siis byte, short, int, long tai char (!) Se ei voi olla boolean arvo tai desimaaliluku (float tai double) Implisiittinen boolean ehto switch-lauseessa on yhtäsuuruus (==). Muut boolean operaattorit eivät ole mahdollisia Et voi suorittaa kahden operandin vertailutestejä switch lauseessa

36 Missä ollaan? if lauseet ja ehdot Muut ehtolausekkeet Tiedon vertailu
while lause Iteraattorit Muut toistolauseet Päätökset ja grafiikka Lisää komponentteja

37 Tiedon vertailu Kun tietoa vertaillaan käyttäen boolean ilmaisujam on tärkeää ymmärtää muutamia tietotyyppien nyansseja Tarkastelemme muutamia avaintilanteita Desimaalilukujen vertailu samansuuruisuutta etsittäessä Merkkien vertailu Stringien vertailu (aakkosellinen järjestys) Olion vertaaminen olion viittaustyyppiin

38 Desimaalilukujen vertailu
Sinun kannattaa harvoin käyttää yhtäsuuruusoperaattoria (==) kun vertailet kahta desimaalilukua (tyyppiä float tai double) Kaksi desimaalilukua ovat samat vain jos niiden alapuolella olevat binääriesitykset mätsäävät Laskutoimituksessa tulee usein pieniä laskuvirheitä (luokkaa ), jotka voivat olla irrelevantteja Monissa tilantessa voit pitää kahta desimaalilukua “tarpeeksi yhtäsuurina”, vaikka ne eivät olisikaan täsmällään samanarvoisia

39 Desimaalilukujen vertailu
Kahden desimaaliluvun yhtäsuurudeen selvittämiseksi, voit haluta käyttää seuraavaa tekniikkaa: if (Math.abs(f1 - f2) < TOLERANCE) System.out.println ("Essentially equal"); Jos kahden desimaaliluvun välinen ero on vähemmän kuin toleranssi, näitä kahta desimaalilukua pidetään yhtäsuurina Toleranssi voidaan asettaa mihintahansa sopivaan arvoon – esimerkiksi

40 Merkkien vertailu (chars)
Kuten olemme todenneet, Javan merkistö pohjautuu Unicode merkistöön Unicode asettaa tietyn numeerisen arvon kyllekin merkille, ja täten merkkien järjestyksen (case-sensitive) Me voimme käyttää vertailuoperaattoreita charreille tämän suuruusjärjestyksen mukaan (esim. Aakkostaminen) Esimerkiksi, merkki '+' on vähemmän kuin Unicode-merkki 'J' koska sen arvon on Unicode merkkitaulukossa ennen J:tä Kirjan liite C tarjoaa yleiskatauksen Unicodesta

41 Merkkien vertailu (char)
Unicodessa numeromerkit (0-9) ovat vierekkäin ja järjestyksessä Samallatavalla, isot kirjaimet (A-Z) ja pienet kirjaimet (a—z) ovat vierekkäin ja järjestyksessä (siis myöskin aakkosten mukaan) Char Unicode arvot 0 – 9 [48, 57] A – Z [65, 90] a – z [97, 122]

42 Merkkijonojen vertailu
Muista että Javan merkkijono (String) on olio equals metodia voisaan kutsua String-oliolle, jotta voidaan tarkistaa sisältäväktö kummatkin Stringit samat kirjaimet täsmällään samassa järjestyksessä equals metodi palauttaa boolean arvon if (name1.equals(name2)) System.out.println ("Same name");

43 Merkkijonojen vertailu
Me emme voi käyttää tavallisia vertailuoperaattoreita (==, >, <, yms.) verrataaksemme Stringejä String luokka sisältää metodin nimeltään compareTo sen päättämiseen tuleeko jokin stringi ennen jotain toista stringiä (aakkosissa) Kutsu name1.compareTo(name2) metodille Palauttaa nolla, jos name1 ja name2 ovat identtiset ( sisältävät samat merkit) Palauttaa negatiivisen arvon, jos if name1 on pienempikuin name2 Palauttaa positiivisen arvon, jos name1 on suurempi kuin name2

44 Merkkijonojen vertailu
if (name1.compareTo(name2) < 0) System.out.println (name1 + "comes first"); else if (name1.compareTo(name2) == 0) System.out.println ("Same name"); System.out.println (name2 + "comes first"); Koska merkkijonojen ja Stringien vertailuy perustuu merkistöön (esim. ASCII-8bit), sitä kutsutaan leksikograagiseksi järjestämiseksi

45 Leksikograaginen järjestäminen
Leksigograafinen järjestäminen ei ole tiukasta aakkosjärjestyksen mukainen niissä tapauksissa kun isoja kirjaimia ja ja pieniä kirjaimia sekotetaan keskenään Esimerkiksi, String "Great" tulee ennen merkkijonoa "fantastic" sillä kaikki isot kirjaimet tulevat ennen pieniä kirjaimia (koskien kaikkia kirjaimia unicodessa) Lisäksi, lyhyet stringit tulevat ennen pidempiä stringejä (jos esim. Samat prexit) (leksikograafisesti) Siksi "book" tulee ennen "bookcase“ nimistä muuttujan sisältöä

46 Olioiden vertailu == operaattoria voidaan käyttää primitiivityyppisille muuttujille – ko. operaatio palauttaa true, mikäli kaksi referenssiä (operandit) ovat toistensa aliakset equals metodi on määritelty kaikille olioille, mutta jollemme uudelleenmääritä (override) sitä kun kirjoitamme luokan, sillä on sama semantiikka kuin == operaattorilla (ei sentään sama syntaksi…) Equals-metodi on uudelleenmääritelty esimerkiksi String luokassa: operandistringien merkkejä (chars) on vertailtava kokonaisuutena Kun kirjoitat luokkaa, voit uudelleenmäärittää equals – metodin palauttamaan true aivan missä tilanteessa haluat (mikä sopii ohjelman logiikkaan)

47 Missä ollaan? if lauseet ja ehdot Muut ehtolausekkeet Tiedon vertailu
while lause Iteraattorit Muut toistolauseet Päätökset ja grafiikka Lisää komponentteja

48 Toistolauseet Toistolauseet mahdollistavat meille lauseen suorittamisen useita kertoja (0,*) Niistä puhutaan usein nimellä looppi tai silmukka Kiten ehtolauseita, näitäkin lauseita kontrolloidaan boolean ilmaisuiden avulla Javassa on kolmenlaisia toistolausekkeita: while silmukka do silmukka for silmukka Ohjelmoijan pitäisi valita ko. tilanteeseen parhaiten sopiva silmukka

49 while lause while lauseella on seuraava syntaksi: while ( ehto )
lauseet; Jos ehto on tosi (true), lauseet suoritetaan Ehdo evaluoidaan uudestaan, ja jos ehto on edelleen tosi, lauseet suoritetaan taas Lauseita suoritetaan toistuvat niin kauan kunnes ehdosta tulee epätosi (false)

50 while lauseen logiikka
ehdon evaluointi false lauseet true

51 while lause Esimerkki while lauseesta:
int count = 1; while (count <= 5) { System.out.println(count); count++; } Jos while lauseen ehto on aluksi epätosi, lauseita ei koskaan suoriteta Siten, while silmukan runko suoritetaan nolla tai usemman kerran (vertaa header ja runko käsitteet)

52 while lause Katsotaan esimerkkejä silmukkojen suorittamisesta
Silmukkaa voidaan käyttää apuna kumulatiivisen summan laskemiseksi Silmukkaa voidaan myös käyttää syötteen tarkistamiseen (usein while-silmukka !arvo), jolloin ohjelmasta tulee robustimbi (siis usein laadukkaampi)

53 Ikuiset silmukat while silmukan rungon on pakko loppujenlopuksi tehdä ehdosta false Jos näin ei käy silmukkaa kutsutaan ikuiseksi silmukaksi eli “ikiloopiksi”, joka suorittuu niin kauan kunnes käyttäjä pakottaa ohjelman keskeytyksen Tämä on yleinen looginen virhe ohjelmansuunnittelussa / toteutuksessa Sinun pitää aina varmistaa (double check) ohjelman logiikka, jotta voit varmistua siitä että silmukkasi terminoituvat aina normaalisti (vrt. Kuitenkin esim. www-palvelinohjelmisto)

54 Ikuiset silmukat Esimerkki ikuisesta silmukasta eli “ikiloopista”:
int count = 1; while (count <= 25) { System.out.println (count); count = count - 1; } Tämä silmukka jatkaa suorittamista kunnes käyttäjä pakottaa ohjelman keskeytyksen (esimerkiksi Control-C) tai kunnes alivuoto tapahtuu eli tulee virhe (poikkeus)

55 Sisäkkäiset silmukat Silmukoita voidaan laittaa sisäkkäin kuten esimerkiksi if lauseita Eli: silmukan runko voi sisältää toisen silmukan Jokaista 1:tä ulomman silmukan iteraatiota koskien, sisällä olevan silmukan kaikki inkrementaatiot käydään läpi jokakerta kaikkiaan

56 Sisäkkäiset silmukat 10 * 20 = 200
Kuinka monta kertaa merkkijono "Here" tulostetaan? count1 = 1; while (count1 <= 10) { count2 = 1; while (count2 <= 20){ System.out.println ("Here"); count2++; } count1++; 10 * 20 = 200

57 Missä ollaan? if lauseet ja ehdot Muut ehtolausekkeet Tiedon vertailu
while lause Iteraattorit Muut toistolauseet Päätökset ja grafiikka Lisää komponentteja

58 Iteraattorit iteraattori on olio, joka mahdollistaa item-ryhmien läpikäymisen yhdellä kertaa Se auttaa sinua käymään kunkin solun läpi vuorollaan ja käsitellä se niinkuin halutaan Iteraattori oliolla on hasNext metodi, joka palauttaa true jos on olemassa vähintään yksi itemi edessä käsiteltäväksi next metodi palauttaa seuraavan alkion Iteraattori oliot määritellään käyttäen Iterator interfacea

59 Iteraattorit Useat luokat Java API:ssa ovat iteraattoreita
Scanner luokka on iteraattori hasNext metodi palauttaa tosi, jos on vielä jäljellä lisää tietoa skannattavaksi (luettavaksi) next metodi palauttaa skannatun merkkijonon Stringinä Scanner luokassa on myös variaatioita hasNext metodista tietyille tietotyypeille (kuten hasNextInt)

60 Iteraattorit Fakta että Scanner on iteraattori on erityisen hyödyllistä luettaessa syötettä tiedostostae Oletetaan, että haluamme lukea ja prosessoida listan URL:eja, jotka on talletettu tiedostoon Yksi scanneri voidaan asettaa lukemaan syötteen jokainen rivi, kunnes tiedoston loppu (EOF) saavutetaan Toinen scanneri voidaan asettaa jokaisella URLille, polun osien käsittelemiseksi yksitellen

61 Missä ollaan? if lauseet ja ehdot Muut ehtolausekkeet Tiedon vertailu
while lause Iteraattorit Muut toistolauseet

62 do lause do lauseella on seuraava syntaksi: do { lauseet; }
while ( ehto ); lauseet suoritetaan ensin kertaalleen, sitten ehto evaluoidaan Lause suoritetaan toistuvasti kunnes ehdosta tulee epätosi (false)

63 do silmukan logiikka lause true ehdon evaluointi false

64 do lause Esimerkki do silmukasta:
int count = 0; Do { count++; System.out.println (count); } while (count < 5); do silmukan runko suoritetaan ainakin kerran

65 while ja do looppien vertailu
lauseet true false ehdon evaluointi while silmukka true ehdon evaluointi lauseet false do silmukka

66 ennenkuin silmukka alkaa
for lause for lauseella on seuraava syntaksi: alustus suoritettan kerran ennenkuin silmukka alkaa lauseet suoritetaan kunnes ehdosta tulee false for ( alustus ; ehto ; inkrementointi ) lauseet; inkrementointi osa suorietaan jokaisen iteraation lopussa

67 for-silmukan logiikka
alustus ehdon evaluointi false lause true inkrementointi

68 for lause for silmukka on funktionaalisesti sama kuin seuraava while silmukan rakenne: alustus; while ( ehto ) { lauseet; inkrementointi; }

69 for lause Esimerkki for-silmukasta:
for (int count=1; count <= 5; count++) System.out.println (count); Alustusosaa voidaan käyttää muuttujan esittelemiseen Kuten while loopissa, for silmukan ehto testataan ennen silmukan rungon suorittamista Näinollen, for silmukan runko suoritetaan nolla tai enemmän kertoja Käytä mieluiten aina aaltosulkeita (myös yhden rivin tapaukset), JCC

70 for lause Inkrementointiosa voi suorittaa minkätahansa laskutoimituksen for (int num=100; num > 0; num -= 5) System.out.println (num); for-silmukka sopii hyvin tilanteisiin, jossa tietty käsky halutaan suorittaa tietty määrä kertoja (toistokertamäärä voidaan laskea tai määrittää etukäteen) for-silmukka on tiivis ilmaisultaan. Kaikki for- silmukat voidaan kirjoittaa while-silmukkoina.

71 for lause Jokainen ilmaisu for-lauseen headerissa on vapaaehtoinen
Jos muuttu(jien) alustaminen jätetään pois, mitään alustamista ei suoriteta (muista i, j ja k silmukkamuuttujat) Jos ehto jätetään pois, pidetään ehtoa aina totena -> tuloksena on on ikilooppi, päättymätön ohjelma Jos inkre(mentoinnit) tai dekremen(toinnit) jätetään pois, näitä operaatioita ei vain suoriteta laisinkaan (for-silmukan optimointi, vähentäen nopeampi…)

72 Iteraattorit ja for-silmukat
Muista, että iteraattori on olio joka mahdollistaa tietyn tietorakenteen jokaisen alkion läpikäynnin (collection) for silmukan variantti yksinkertaistaa esim Perl-kielen tavoin alkioiden läpikäymisen Esimerkiksi, jos BookList on iteraattori joka hallinnoi Book olioita, seuraava silmukka tulostaa jokaisen kirjan (mitä tapahtuu, kun BookList on taulukko) : for (Book myBook : BookList) System.out.println (myBook);

73 Iteraattorit ja silmukat (eli loopit)
Tällainen for silmukka voidaan lukea seuraavasti: “jokaiselle Book:lle BookList:ssä tee…" Siksi for-silmukan iteraattoriversioon viitataan joskus foreach-silmukkana (vrt. Perl foreach) Tämä poistaa tarpeen kutsua esim. hasNext ja next metodeita eksplisiittisesti Iteraattori on erityisen hyödyllinen, kun prosessoidaan taulukkoja, tähän tutustumme luvussa 7

74 Yhteenveto Kappale 4 keskittyi: boolean ilmaisut ehtolausekkeet
tiedon vertailu toistolausekkeet iteraattorit

75 Lähteet Lewis & Loftus: Java Software Solutions kalvot


Lataa ppt "Ehto- ja toistolausekkeet"

Samankaltaiset esitykset


Iklan oleh Google