Alkuarvot ja tyyppimuunnokset (1/5) Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int luku = 123; Alkuarvon on oltava muuttujan tietotyypin mukainen, esimerkiksi int-muuttujilla kokonaisluku, doublemuuttujilla desimaaliluku ja String-muuttujilla merkkijono. Muuttujalle on turvallisinta antaa aina jokin sopiva alkuarvo. 1 Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvoa ei ole välttämätöntä antaa, jolloin pelkkä muuttujan esittely riittää, esimerkiksi: int summa; double cm; String ika; Tällöin on huolehdittava siitä, että ohjelmaan ei voi jäädä tilannetta, missä muuttujaa yritetään käyttää ilman, että sille on annettu sijoituslauseella arvoa muutoin seurauksena on virheilmoitus Eclipsessä. 2 Alkuarvot ja tyyppimuunnokset (3/5) (Viittaus)muuttujille annetaan usein alkuarvoksi tyhjää tarkoittava arvo null, jos muuttujalle ei ole esittelyn yhteydessä anneta varsinaista käyttökelpoista arvoa. Tyhjäarvoa käytetään esimerkiksi seuraavasti: String vastaus = null; Tyhjäarvo on tosiaan sijoitettu muuttujaan, kokeile esimerkiksi tulostaa se: String vastaus = null; System.out.prinln( Arvona on +vastaus); 3 1
Alkuarvot ja tyyppimuunnokset (4/5) Sijoituslauseita käytetäessä on joskus tarpeen sijoittaa muuttujaan arvo, joka ei alun perin ole muuttujan tyyppiä (esimerkiksi muuttaa desimaaliluku kokonaisluvuksi). Osan tyyppimuunnoksista Java tekee automaattisesti (esimerkiksi kokonaisluvun voi sijoittaa desimaalilukumuuttujaan), mutta useimmissa tapauksissa tyyppimuunnos on kirjoitettava näkyviin. Kaikki tyyppejä ei kuitenkaan voi muuntaa ristiin. 4 Alkuarvot ja tyyppimuunnokset (5/5) Tyyppimuunnoksen tekemisestä käytetään englannissa termiä casting (suomalaisittain kastaus). Esimerkkejä tyyppimuunnoksista: double luku = 12; //automaattinen, luvuksi 12.0 int luku2 = (int)5.75; //luku2:n arvoksi 5 luku = 3.14; //sijoituslause luku2 = (int)luku; //luku2:n arvoksi 3 Huom: Käsin tehdyn tyyppimuunnoksen 5 3. Vertailu ja ehtolause (if-else if-else) Olemme tähän asti käyttäneet (tietoisesti) ohjelmoinnin perusrakenteista vain peräkkäisyyttä, eli lauseet suoritetaan peräkkäin yksi kerrallaan. Monipuolisempien ohjelmien tekeminen vaatii muutamia muita rakenteita, joista ensimmäisenä käsittelemme ehtolauseen (eli valinnan). Ehtolausetta varten tarvitsemme ensin vertailun käsitteen. 6 2
Vertailu (1/5) Vertailulla tarkoitetaan operaatiota, jossa kahta arvoa (esimerkiksi lukua, muuttujan arvoa tai lausekkeen arvoa) verrataan toisiinsa. Esimerkiksi vertailu Onko a pienempi kuin b? kirjoitetaan a < b. Javassa vertailun tulos on totuusarvo (epätosi tai tosi, eli true tai false, esimerkiksi vertailun 1<2 tulos on true), vrt. laskutoimituksen tulos, esimerkiksi yhteenlaskun 1+4 tulos on 5. 7 Vertailu (2/5) Vertailuoperaattorit Javassa ovat seuraavat: == yhtä suuri kuin!= erisuuri kuin < pienempi kuin > suurempi kuin <= pienempi- tai yhtä suuri kuin >= suurempi- tai yhtä suuri kuin Huomaa ero yhtä suuruusoperaattorin (==) ja sijoitusoperaattorin välillä (=): int luku1 = 5; luku1 = 5; // luku1 saa arvon 5 luku1 == 5; // onko luku1 yhtäsuuri kuin 5? 8 Vertailu (3/5) Vertailun tuloksen voi esimerkiksi sijoittaa booleantyyppisen muuttujan arvoksi: int testi = 5; boolean onkosuurempi = false; testi = 4; // testi saa arvon 4 onkosuurempi = (luku1 > 5); // false testi = 8; onkosuurempi = (luku1 > 5); // true 9 3
Vertailu (4/5) Käytettävissä ovat myös seuraavat operaattorit:! NOT (looginen ei) && AND (looginen ja) OR (looginen tai) Näitä käytetään lausekkeiden kanssa, loogista eitä yhden ja muita kahden lausekkeen kanssa (näitä voi myös yhdistellä):!(lauseke) (lauseke) && (lauseke) (lauseke) (lauseke) 10 Vertailu (5/5) Esimerkkejä: int a = 5; int b = 7; boolean c = false; c =!(c); // c saa arvon false c = (a<b) && (b>0); // c saa arvon true c = (a==b) (b>0); // c saa arvon true c = ((a<0) && (b>0)) (b>a); // true 11 Ehtolause (if-else if-else) (1/3) Ehtolauseella voidaan ehdon perusteella valita, mitä tehdään seuraavaksi. Yksinkertaisessa muodossa (jos-niin) ehtolauseen rakenne on seuraavanlainen: if (ehto) { // lauseet, jotka suoritetaan, jos ehto on // tosi else { // lauseet, jotka suoritetaan, jos ehto on // epätosi 12 4
Ehtolause (if-else if-else) (2/3) Ehtolauseen ehtona on lauseke, jolla on totuusarvo (usein esimerkiksi looginen vertailu tms.). Lauseen else-osaa ei tarvitse kirjoittaa, jos ehdon ollessa epätosi ei tarvitse tehdä mitään, siis if (ehto) { // lauseet, jotka suoritetaan, jos // ehto on tosi 13 Luentoesimerkki 3.1 Tee ohjelma, joka kysyy käyttäjältä kokonaisluvun. Jos luku oli pienempi kuin 100, ohjelma tulostaa näytölle Lukusi on alle sata, muuten ohjelma tulostaa näytölle Lukusi on yli sata. Talleta ratkaisusi tiedostoon SataanVertailu.java. 14 Ehtolause (if-else if-else) (3/3) Pidemmässä muodossa (jos-niin-muuten) rakenne on seuraavanlainen (else if-osia voi olla useita): if (ehto1) { // lauseet, jotka suoritetaan, jos ehto1 on // tosi else if (ehto2){ // lauseet, jotka suoritetaan, jos ehto2 on // tosi else { // lauseet, jotka suoritetaan, jos kumpikaan // ehdoista ei ollut tosi 15 5
Luentoesimerkki 3.2 Tee ohjelma, joka kysyy käyttäjän iän. Jos ikä on alle 18, ohjelma tulostaa Olet alaikäinen. Jos ikä on yli 18, mutta alle 21, ohjelma tulostaa Olet 18-21-vuotias. Jos ikä on yli 21, ohjelma tulostaa Olet yli 21-vuotias. Talleta ratkaisusi tiedostoon IkaKysymys.java. 16 4. Toistolauseet while- ja do-while (1/3) Toistolauseen avulla samoja lauseita voidaan toistaa, kunnes jokin ehto lakkaa olemasta tosi. Toistolauseista while-lauseen rakenne on seuraava: while (ehto) { // lauseet, joita toistetaan, kunnes // ehto on epätosi Tässä tapauksessa ehto testataan ennen toistoa, toiston sisällä olevia lauseita ei siis välttämättä suoriteta kertaakaan. 17 Toistolauseet while- ja do-while (2/3) Mitä seuraava ohjelmanpätkä tekee? int luku = 1; boolean jatketaan = true; while (jatketaan) { luku = luku * luku; System.out.println(luku*luku); luku++; Entä miten kauan ohjelman suoritus jatkuu? 18 6
Luentoesimerkki 3.3 Tee ohjelma, joka tulostaa näytölle kokonaisluvut yhdestä sataan. Käytä while-lausetta. Talleta ratkaisusi tiedostoon WhileKokeilu.java. 19 Toistolauseet while- ja do-while (3/3) Toistolauseista do-while -lauseen rakenne on seuraava: do { // lauseet, joita toistetaan, kunnes // ehto on epätosi while (ehto); Tässä tapauksessa ehto testataan toiston jälkeen, joten toiston sisällä olevat lauseet suoritetaan siis ainakin kerran. Myöhemmin opitaan vielä yksi toistorakenne, for-lause. 20 Luentoesimerkki 3.4 Tee ohjelma, joka kysyy käyttäjältä kokonaislukuja, kunnes käyttäjä antaa luvuksi nollan. Ohjelma tulostaa näytölle jokaisen luvun antamisen jälkeen ko. luvun käänteisluvun. Käytä do-while-lausetta. Talleta ratkaisusi tiedostoon DoWhileKokeilu.java. 21 7