Java-kielen perusteita valintalauseet 1
Johdantoa kontrollirakenteisiin Tähän saakka ohjelmissa on ollut vain peräkkäisyyttä eli lauseet on suoritettu peräkkäin yksi kerrallaan Tarvitsemme myös valintaa ja toistoa Ensimmäisenä käsittelemme ehtolauseen (eli valinnan) Ehtolausetta varten tarvitsemme ensin vertailu- ja loogisen lausekkeen ymmärryksen 2
Vertailulauseke Vertailulausekkeella tarkoitetaan lauseketta, jossa kahta arvoa (esimerkiksi lukua, muuttujan arvoa tai lausekkeen arvoa) verrataan toisiinsa Lausekkeen arvon on totuusarvo (boolean): totta (true) tai epätotta (false) Esim. vertailulauseke: Onko muuttujan a sisältämä arvo pienempi kuin muuttujan b arvo? kirjoitetaan a < b Lausekkeen arvo on joko tosi tai epätosi, eli true tai false esim. Vertailulausekkeen 1<2 arvo on true 3
Vertailuoperaattorit (6.1.2) Vertailuoperaattorit ovat Javassa seuraavat: == yhtäsuuri kuin!= erisuuri kuin > suurempi kuin >= suurempi tai yhtä suuri kuin < pienempi kuin <= pienempi tai yhtä suuri kuin Esim. int rahaa = 2, velkaa = 5, palkka = 5; rahaa <= palkka velkaa < rahaa palkka <= velkaa // onko true vai false? // onko true vai false? // onko true vai false? Soveltuu kahden arvon vertailuun 4
Vertailulauseke jatkuu Vertailulausekkeen arvo on totuusarvo boolean, jonka voi esimerkiksi sijoittaa boolean-tyyppisen muuttujan arvoksi: int luku1 = 5, testi = 4; boolean onkosuurempi = false; onkosuurempi = luku1 > testi; // true luku1 = 8; onkosuurempi = (luku1 > 5); // true 5
Loogiset lausekkeet (6.1.3) Useampia vertailuja voidaan liittää yhteen loogisten operaattoreiden avulla looginen lauseke, joka edustaa arvoa true tai false Jos rahaa > velkaa tai palkka + rahaa >= velkaa niin voit maksaa velkasi viimeistään palkkapäivänä Loogiset operaattorit:! negaatio, vastakohta (not) // totuusarvon vastakohta && ehdollinen JA (and) // true, jos molemmat tosia & ehdoton JA ehdollinen TAI (or) // true, jos jompikumpi on tosi ehdoton TAI ^ poissulkeva tai, JOKO TAI // true, jos vain ja ainoastaan // toinen ehdoista on tosi 6
Ehdollisen ja ehdottoman ero && ja eli ehdollisissa operaatioissa arvon kehittäminen lopetetaan heti, kun tulos voidaan päätellä & ja - tutkitaan aina loppuun saakka Yleensä käytetään ehdollisia muotoja ( &&, ) 7
Esimerkkejä: int a = 5; int b = 7; boolean c = false; c =!c; System.out.println("1 = " + c); // mitä tulostuu? c = a < b && b > 0; System.out.println("2 = " + c); c = (a == b) (b > 0); System.out.println("3 = " + c); c = a < 0 && b > 0 b < a; System.out.println( 4 = " + c); Loogisen lausekkeen vertailulausekkeet voidaan ympäröidä suluilla loogisesta lausekkeesta tulee luettavampi. 8
Loogisen lausekkeen arvon laskenta Loogisen lausekkeen arvoon voi vaikuttaa suluilla Esim. Looginen operaattori && on vahvempi kuin Esim int a = 5, b = 7; boolean c = false; c = ( a < b b < 0) && b < a; System.out.println("5 = " + c); tulostuu: 5 = false c = a < b b < 0 && b < a; System.out.println("6 = " + c); tulostuu: 6 = true c =!(a < b && b > 0); System.out.println("7 = " + c); tulostuu: 7 = false // sama asia c = a >= b b <= 0; System.out.println("8 = " + c); tulostuu: 8 = false 9
Valintalauseet if- ja switch-case Ohjelmointi - Irene Vilpponen, Seija Lahtinen 10
Valintalause (if-else) (6.2.1) Syntaksi: if ( ehtolauseke ) lause tai if ( ehtolauseke ) lause else lause ehtolauseke: on joko vertailu tai looginen -lauseke Esim. loytyi!= false // vertailu lauseke a < b && b > c // looginen lauseke 11
Valintalause (if-else), jatkuu if ( ehtolauseke ) lause Semantiikka eli merkitys: ensin ratkaistaan ehtolausekkeen arvo. Jos arvo on true suoritetaan lause. Jos ehtolausekkeen arvo on false hypätään lauseen yli if ( ehtolauseke ) lause else lause Semantiikka eli merkitys: ensin ratkaistaan ehtolausekkeen arvo. Jos arvo on true suoritetaan lause ja hypätään else-haaran (else-sana ja lause) yli. Jos ehtolausekkeen arvo on false suoritetaan else-sanan jälkeen oleva lause. 12
Valintalause (if-else), jatkuu.. lause voi olla jokin seuraavista: o sijoituslause ; o ehtolause o toistolause o metodin kutsu o tyhjälause ( ;) o koottulause koottulause: Alkaa aaltosululla { ja loppuu aina aaltosulkuun } voi sisältää yhden tai useamman lauseen { lause lause lause... } 13
Valintalause (if-else), jatkuu Esim. int a = 4, b; b = 4; if (a == b) System.out.println(a + = + b); else System.out.println(a +!= + b); tulostuu: 4 = 4 14
Valintalause (if-else), jatkuu Esim. int a = 5, b = 7; if ( a < b) // mitä ohjelmapätkä tulostaa? { } else { } System.out.println( a + " < " + b); System.out.println("tai"); System.out.println( b + " >= " + a); System.out.println( a + " >= " + b); System.out.println("tai\n" + b + " <= " + a); // Mitä ohjelmapätkä tulostaisi, jos a:n arvo olisi 10 ja b:n // arvo 7? // Entä mitä tulostuu, kun a = 6 ja b = 6 15 Ohjelmointi - Irene Vilpponen, Seija Lahtinen
Valintalause (if-else), jatkuu Esim. Scanner input = new Scanner(System.in); int luku; System.out.println("Anna positiivinen kokonaisluku:"); luku = input.nextint(); if (luku > 0) { System.out.println("Kiitos, annoit positiivisen kokonaisluvun"); System.out.println(luku + "*" + 2 + " = " + luku*2); } else System.out.println("Ei kiitos, et antanut positiivista + kokonaislukua!"); 16
Luentoesimerkki /* Tee ohjelma, joka tuottaa arvosanan käyttäjältä pyydetyn * pisteen perusteella: * * alle 50 hylätty * 50 59 T1 * 60 68 T2 * 69 76 H3 * 77 84 H4 * 85 tai yli K5 */ 17
Esimerkin ratkaisu package kokeilu; import java.util.scanner; public class ArvosanaOhjelma { public void aja() { // määritellään muuttujat, joita tarvitaan Scanner input = new Scanner(System.in); int pisteet; String arvosana; // pyydetään pisteet System.out.println("Anna kokeen pisteet:"); pisteet = input.nextint(); 18
aja-metodi jatkuu.. if (pisteet < 50) // onko pisteet < 50? arvosana = "Hylätty"; else if (pisteet <= 59) // onko pisteet välillä 50 59? arvosana = "T1"; else if (pisteet <=68) // onko pisteet välillä 60 68? arvosana = "T2"; else if (pisteet <= 76) // onko pisteet välillä 69 76? arvosana = "H3"; else if (pisteet <=84) // onko pisteet välillä 77 84? arvosana = "H4"; else arvosana = "K5"; // pisteet >= 85 } System.out.println("Pisteet: " + pisteet + " ja arvosana: " + arvosana); 19
Ohjelman ratkaisu jatkuu.. } public static void main(string[] args) { ArvosanaOhjelma a = new ArvosanaOhjelma(); a.aja(); } Harjoitus: Tee ohjelma, OstovoimaOhjelma, joka kysyy käyttäjän kuukausipalkan ja kertoo sen ostovoiman. Jos palkka on 0-1500, niin tulostetaan Kaurapuuro on ihan hyvää. Jos palkka on 1501 2700, niin tulostetaan Kerran vuodessa Kanarialle Jos palkka on 2701-3600, niin tulostetaan Joskus jopa Meksikoon Jos palkka on yli 3600, niin tulostetaan Minne mieli tekeekin Muuten tulostetaan Syöttämäsi palkka on virheellinen. 20 Ohjelmointi - Irene Vilpponen, Seija Lahtinen
Switch-case-lause (6.2.3) Syntaksi: switch (valintaa kontrolloiva lauseke ) { case vakio1: } case vakio2: default: Valintaa kontrolloiva lauseke voi olla tietyyppiä: char, byte, short tai int Vakio: on vakioarvo, jonka pitää olla samaa tietotyyppiä kuin valintaa kontrolloiva lauseke Sama vakion arvo voi esiintyä vain kerran. 21
Switch-case-lause jatkuu.. Semantiikka eli toiminta: Ensin valintaa kontrolloiva lauseke ratkaistaan Sitten siirrytään siihen valintakohtaan (case vakio), jonka vakion arvo on yhtäsuuri kuin lausekkeen arvo suoritetaan valintakohdan lauseet, kunnes vastaan tulee break-lause tai switch-lauseen oikea sulku 22
Switch-case-lause jatkuu Muita sääntöjä: default (= oletus)-osa saa esiintyä vain kerran eikä ole pakollinen jos default-osa on olemassa ja lausekkeen arvo ei ole yhtäsuuri kuin mikään vakio, suoritetaan default-osan lauseet jos default-osa puuttuu, ja mikään vakio ei ole yhtäsuuri kuin lausekkeen arvo, switch-lause ei tee mitään jos valinnan lausejonon lopusta puuttuu break-lause, suoritus jatkuu seuraavan valinnan lauseista, kunnes vastaan tulee break-lause tai switch-lauseen oikea sulku 23
Switch-case-lause esimerkki public class SwitchCaseLause { public void aja(){ Scanner input = new Scanner(System.in); int luku; System.out.print ("Anna luku: "); luku = input.nextint(); } switch ( luku ) { case 0: System.out.println ("luku == 0"); break; case 1: case 2: case 3: System.out.println ("1 <= luku <= 3"); break; default: System.out.println("luku < 0 tai luku > 3"); } 24
Harjoitus: Tee ohjelma YoKoeKommentti.java, joka pyytää käyttäjältä kirjaimen, ja kirjoittaa ko. arvosanaa vastaavan kommentin seuraavasti: kirjain i tai I a tai A b tai B c tai C m tai M l tai L komentti Valitettavasti tuli hylätty Läpi meni, mutta niukasti Tuloksesi oli tyydyttävä Selvisit aivan kohtuullisesti Hienosti meni!! Upeaaaaaa mahtavaa. 25