Toisto Toistolausekkeet for, while(ehto){…} ja do {…} while(ehto) Toistorakenteista poistuminen ja niiden sisällä siirtyminen
Esiehtoinen toistorakenne while (ehto) { /* suoritettava koodi */ } Esimerkki: int powerOfTwo = 2; while (powerOfTwo < 10) { System.out.println(”Next power: ” + powerOfTwo); powerOfTwo *= 2; }
Esiehtoinen toistorakenne Toistorakennetta suoritetaan niin kauan kun annettu ehto on tosi (true) Mikäli ehto ei ole aluksikaan tosi, ei toistorakennetta suoriteta kertaakaan
Jälkiehtoinen toistorakenne do { /* suoritettava koodi */ } while (ehto); Esimerkki: boolean mayExit = false; do { System.out.println(”Syötä luku (1-9) : ”); int userValue = getInt(); if (userValue>0 && userValue<10) mayExit = true; } while (!mayExit);
Jälkiehtoinen toistorakenne Toistorakenne suoritetaan vähintään yhden kerran Seuraavalle suorituskerralle siirrytään, mikäli annettu ehto on tosi
for-toistorakenne for (alustus;jatkamisehto;lisäyslauseke) { } /* suoritettava koodi */ } Käyttö järkevää kun toistojen lukumäärä on ennakkoon tiedossa Esimerkki for (int i=0;i<10;i++) { System.out.println(”Luku ” + i); }
for-toistorakenne suoritetaan yhden kerran Tuloste Luku 0 Luku 1 Luku 2 Luku 3 Luku 4 Luku 5 Luku 6 Luku 7 Luku 8 Luku 9 for (int i=0;i<10;i++) { System.out.println(”Luku ” + i); } (1) (2) (3) suoritetaan yhden kerran suoritetaan joka kierroksella, jos totuusarvo on false, toistorakenteen suoritus päättyy suoritetaan joka kierroksen lopuksi ennen seuraavan kierroksen kohdan (2) tarkastusta
break ja continue toistorakenteissa Kaikissa edellä esitellyissä toistorakenteissa voidaan käyttää break- ja continue-lausekkeita: break-lauseke poistuu toistorakenteesta continue-lauseke siirtyy suoraan seuraavalle suorituskerralle turhaa käyttöä kannattaa välttää
break ja continue - esimerkki for (int i=0;i<10;i++) { if (i==5) continue; else if (i==8) break; System.out.println(”Kierros ” + i); } hyppy seuraavalle kierrokselle, mikäli jatkoehto 1 toteutuu, lisäyslauseke 2 suoritetaan kuten normaalisti (1) (2) poistutaan suoraan for-lausekkeesta Tuloste: Kierros 0 Kierros 1 Kierros 2 Kierros 3 Kierros 4 Kierros 6 Kierros 7
ehtojen asettaminen Kaikissa toistorakenteissa käytetään jotakin ehtoa, joka kertoo milloin suoritus lopetetaan Ehdot kannattaa asettaa mahdollisimman rajaaviksi, esimerkiksi: ei i!=count, koska silloin esim. luvulla –1 kutsuttaessa suoritus ei päättyisi ikinä public void printNumbers(int count) { for (int i=0;i<count;i++) { System.out.println(”Luku ” + i); } Ikuisten toistojen välttäminen em. ohjelmointityylillä on hyvä tapa
Näkyvyysalueet ja muuttujien elinaika private, public paikalliset muuttujat
Näkyvyysalueen valinta Ohjelmissa kannattaa aina valita mahdollisimman pieni näkyvyysalue jokaiselle muuttujalle ja metodille Kaikki luokan attribuutit kannattaa sijoittaa private-näkyvyysalueeseen Luokan yleiseen käyttöön tarkoitetut metodit sijoitetaan public-näkyvyysalueeseen, kaikki muut private-näkyvyysalueeseen Lisäksi on olemassa protected-näkyvyysalue, joka on ikään kuin public:n ja private:n välimaastossa oleva. Käyttö on tarpeellista lähinnä kun hyödynnetään perintää.
Paikallinen muuttuja vai luokan attribuutti Muuttujat sijoitetaan aina pienimpään mahdolliseen käyttöalueeseensa. Mikäli muuttujan käyttö on tarpeellista monissa luokan metodeissa tai se kuvaa olion tilaa, tehdään siitä attribuutti. Mikäli käyttö on tarpeellista vain yksittäisessä metodissa, käytetään paikallista muuttujaa.
Paikallisen muuttujan määrittely - esimerkki Paikallinenkin muuttuja kannattaa sijoittaa aina mahdollisimman rajattuun alueeseen. Esimerkki: public void printMembers() { Vector members = getAllMembers(); for (int i=0;i<members.size();i++) { Member member = members.getAt(i); String name = member.getName(); System.out.println(”Jäsen: ” + name); } Muuttujien esittelyt voitaisiin sijoittaa katkoviivalla osoitettuun paikkaan, mutta koska niitä ei käytetä kuin toistorakenteen sisällä, on ne sijoitettu toiston sisältämän lohkon sisään.
Muuttujien elinaika Jokaisella muuttujalla on näkyvyysalueen lisäksi ns. elinaika, jolloin se on olemassa Luokkamuuttujat on olemassa aina kun olion konstruktoria on kutsuttu, olemassaolo loppuu kun olioon ei ole enää yhtään viitettä Paikalliset muuttujat ovat olemassa lohkonsa sisällä. Kun lohko päättyy, paikallisen muuttujan elinaika päättyy.