Lauseet. Ehdollinen lause. Tämän osan sisältö. Ehdollinen lause. Esimerkkejä. Yksinkertainen ehto. Lohkosulut ja sisennys. Ehdollinen lause if



Samankaltaiset tiedostot
Java-kielen perusteita

Ehto- ja toistolauseet

Java-kielen perusteita

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Ehto- ja toistolauseet

11. Javan toistorakenteet 11.1

12. Javan toistorakenteet 12.1

Java-kielen perusteet

12. Javan toistorakenteet 12.1

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

13. Loogiset operaatiot 13.1

Java-kielen perusteet

11. Javan valintarakenteet 11.1

Ohjausrakenteet. Valinta:

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat

Metodien tekeminen Javalla

Taulukot. Taulukon käsittely. Tämän osan sisältö. Esimerkki. Taulukon esittely ja luonti. Taulukon alustaminen. Taulukon koko

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten

16. Ohjelmoinnin tekniikkaa 16.1

Ohjelmoinnin perusteet Y Python

16. Ohjelmoinnin tekniikkaa 16.1

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Tietuetyypin määrittely toteutetaan C-kielessä struct-rakenteena seuraavalla tavalla:

13. Loogiset operaatiot 13.1

Ohjelmoinnin peruskurssi Y1

Java-kielen perusteita

Ohjelmointiharjoituksia Arduino-ympäristössä

Ohjelmoinnin peruskurssi Y1

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

11. Javan valintarakenteet 11.1

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

7. Näytölle tulostaminen 7.1

Muuttujat ja kontrolli. Ville Sundberg

Ohjelmoinnin peruskurssi Y1

Sisällys JAVA-OHJELMOINTI Osa 3: Laskennan ohjaus. Lohkolause (block) Peräkkäinen laskenta. Lohkon käyttö. Esimerkki

Java-kielen perusteet

Rajapinta (interface)

Sisältö. 22. Taulukot. Yleistä. Yleistä

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

Sisältö. 2. Taulukot. Yleistä. Yleistä

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Ohjelmoinnin perusteet Y Python

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

5/20: Algoritmirakenteita III

ITKP102 Ohjelmointi 1 (6 op)

12. Näppäimistöltä lukeminen 12.1

Ohjelmoinnin perusteet Y Python

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Ohjelmoinnin perusteet Y Python

8. Näppäimistöltä lukeminen 8.1

1. Kun käyttäjä antaa nollan, niin ei tulosteta enää tuloa 2. Hyväksy käyttäjältä luku vain joltain tietyltä väliltä (esim tai )

Ohjelmoinnin perusteet Y Python

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Ohjelmoinnin perusteet, kurssikoe

815338A Ohjelmointikielten periaatteet

if-lauseen yksinkertaisin muoto on sellainen, missä tietyt lauseet joko suoritetaan tai jätetään suorittamatta.

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

Java kahdessa tunnissa. Jyry Suvilehto

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

14. Hyvä ohjelmointitapa 14.1

Listarakenne (ArrayList-luokka)

public static void main (String [] args)

Seuraavassa on esimerkki for-, while- ja do-while -lauseesta:

Python-ohjelmointi Harjoitus 2

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Ohjelmoinnin jatkokurssi, kurssikoe

Java-kielen perusteet

1. ohjelman selitystä Muutamien ohjelman yksityiskohtien läpikäyntiä

Taulukoiden käsittely Javalla

Tietotyypit ja operaattorit

Luokan muodostimet (Constructors)

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

811120P Diskreetit rakenteet

Sisällys. 3. Pseudokoodi. Johdanto. Johdanto. Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen.

8. Näppäimistöltä lukeminen 8.1

Olio-ohjelmointi Javalla

Algoritmit. Ohjelman tekemisen hahmottamisessa käytetään

13. Hyvä ohjelmointitapa (osa 1) 13.1

Sisällys. 15. Lohkot. Lohkot. Lohkot

811120P Diskreetit rakenteet

Taulukot. Jukka Harju, Jukka Juslin

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Lista luokan sisällä

1. Omat operaatiot 1.1

Ohjelmoinnin perusteet Y Python

Javan GUI Scratchaajalle

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

Mitä poikkeuskäsittely tarkoittaa?

Transkriptio:

3 Lauseet Lue kirjasta s. 54-84 Tämän osan sisältö Ehdollinen lause if Looginen lauseke vertailut AND-operaattori &&, & OR-operaattori, NOT-operaattori! Valintalause switch Toistolauseet while for do while break, continue Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-1 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-2 Ehdollinen lause Ehdollinen lause Lue kirjasta s. 56-66 if (ehto) { tai if (ehto) { lauseet1; else { lauseet2; ehto lauseet1 lauseet2 Jos ehto toteutuu (), suoritus jatkuu välittömästi ehdon perässä olevista lauseista Jos ehto ei toteudu (false), suoritus jatkuu else-haaran lauseista, tai jos else-haara puuttuu, koko if-lausetta seuraavista lauseista Ehdot usein yksinkertaisia vertailuja vertaa muuttujan arvoa vakioon vertaa kahden muuttujan arvoja vertaa kahden laskulausekkeen arvoja Yksinkertaisia ehtolausekkeita voi yhdistellä loogisilla AND-, OR- ja NOT-operaattoreilla (&&, ja!) false Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-3 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-4 Yksinkertainen ehto Looginen lauseke on muotoa <operandi> <looginen operaattori> <operandi> Operandit voivat olla lausekkeita muuttujia, vakioita tai aritmeettisia ja loogisia lausekkeita operandien arvot voitava laskea ennen ehdon testaamista Operaation tuloksena tyyppiä boolean oleva totuusarvo tai false Javan vertailuoperaattorit Operaattori ==,!= yhtäsuuri kuin, erisuuri kuin Merkitys >, >= suurempi kuin, suurempi tai yhtäsuuri kuin <, <= pienempi kuin, pienempi tai yhtäsuuri kuin Huomaa merkkien järjestys Esimerkkejä Onko henkilön ikä vähintään tasan 30 vuotta boolean kolmekymppinen = (ikä == 30); Jos lauseke oli totta, muuttujan arvoksi tuli, muuten false if (kolmekymppinen) { System.out.println( Oot kolomekymppinen, oot ); Jos ikää on jo 18, niin sano häntä aikuiseksi if (ikä >= 18) { System.out.println( Olet jo aikuinen ); Huomaa yhtäsuuruusoperaattorin ja sijoitusoperaattorin ero Sijoitus (=) asettaa vasemmalla olevaan muuttujaan oikeanpuoleisen lausekkeen arvon Helposti syntyvä moka: if (ikä=30) { Vertailu (==) tarkastaa, onko vasemman- ja oikeanpuoleisen lausekkeen arvot samoja Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-5 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-6 boolean positiivinen; if (luku > 0) { positiivinen = ; else { positiivinen = false; if (positiivinen == ) { boolean positiivinen = false; if (luku > 0) { positiivinen = ; if (positiivinen == ) { positiivinen = (luku > 0); if (positiivinen) { if (luku > 0) { Lohkosulut ja sisennys Suositeltu käytäntö public class MunLuokka { public static void munmetodi() { if (ehto) { else { ks. http://java.sun.com/docs/codeconv/ Oikealla keskellä: vertailulausekkeen arvonahan on tai false! Oikealla alla: loogista lauseketta käytetään suoraan ehdossa ilman boolean-apumuuttujaa Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-7 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-8

Sisäkkäiset if-lauseet import javax.swing.*; public class Vertailu3 { String lukustr; Kirja s. 65 lukustr = JOptionPane.showInputDialog("Anna kokonaisluku :"); luku = Integer.parseInt(lukuStr); if (luku == 100) { Suositus: aina lohkosulut JOptionPane.showMessageDialog(null,"Lukusi on sata"); else if (luku > 100) { JOptionPane.showMessageDialog(null,"Lukusi on > 100"); else { JOptionPane.showMessageDialog(null,"Lukusi on < 100"); System.exit(0); else liittyy aina sitä lähimpänä edellä olevaan if-sanaan Huomaa sisennystapa! Looginen lauseke Lue kirjasta s. 66-68 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 43-9 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-10 Looginen lauseke Loogiset lausekkeet Looginen lauseke on muotoa <operandi> <looginen operaattori> <operandi> Operandit voivat olla lausekkeita boolean muuttuja / vakio tai looginen lauseke Loogisia lausekkeita voi yhdistellä loogisilla operaattoreilla AND, OR ja NOT käytä tarvittaessa sulkuja selventämään rakennetta Javan loogiset operaattorit Operaattori! NOT &, && Merkitys AND, ehdollinen AND (kynnystävä), OR, ehdollinen OR (kynnystävä) AND-operaattori ehto1 && ehto2 lausekkeen arvo on, jos molemmat ehdot ovat tosia (a >= 10) && (a <= 15) OR-operaattori ehto1 ehto2 lausekkeen arvo on, jos jompikumpi ehdoista on totta (a == 10) (b < 5) NOT-operaattori!ehto lausekkeen arvo on, jos ehdon arvo on false!(b < a) ehto1 ehto2! ehto1 ehto1 && ehto2 ehto1 ehto2 false false false false false false false false false false a: 10 b: 5 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-11 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-12 Ehdolliset && ja Ehdollisuus tarkoittaa, että lausekkeen arvon evaluointi voidaan lopettaa heti, kun ollaan varmoja sen arvosta && perässä tuleva osa evaluoidaan vain, jos alkuosa perässä tuleva osa evaluoidaan vain, jos alkuosa false int x, y; if ((x == 0) (y/x > 2)) {... Jos edellä x on 0, niin OR-lausekkeen arvo loppuosasta riippumatta aina, joten loppuosaa ei suoriteta ehdollisuus takaa sen, että ei pääse syntymään nollallajakoa Käytä sulkuja selventämään lausekkeen rakennetta eivät pakollisia -- operaattoreiden presedenssisäännöt määräävät yksikäsitteisen evaluointijärjestyksen Esim. OR on säännöissä ylempänä kuin vertailuoperaattorit, jotka ovat puolestaan ylempänä kuin aritmeettiset operaattorit if (x == 0 y/x > 2) {... Lue kirjasta s. 69-71 Valintalause Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-13 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-14 Valintalause switch (valitsin) { case arvo1: // tähän valitsimen arvolla arvo1 //... välissä muita vaihtoehtoja case arvon: // tähän valitsimen arvolla arvon default: // tähän ellei edeltä löytynyt sopivaa arvoa Kahden peräkkäisen arvon "etäisyys" vakio Valitsin on lauseke, jonka arvona merkki tai kokonaisluku muuttuja, vakio, laskulauseke Myös luetellun tyypin arvo käy, ks. kirja s. 159 default-osa voi puuttua jos mikään case-arvo ei täsmää, suoritus jatkuu switch-lausetta seuraavasta lauseesta break voi puuttua kun case-osassa on break, suoritus jatkuu switch-lauseen jäljessä tulevilla lauseilla, muuten suoritus "valuu" seuraavaan kohtaan public class Arvosana { Vrt. kirja s. 69, 70 System.out.println("Anna arvosanasi (k, h, t tai v): "); char arvosana = Oma.lueChar(); switch (arvosana) { char-vakio case 'k': case 'K': System.out.println("Sait siis kiitettävän!"); Kunkin casesanan jäljessä vain case 'h': case 'H': yksi arvo System.out.println("Sait siis hyvän."); case 't': case 'T': System.out.println("Sait siis tyydyttävän"); case'v': case'v': System.out.println("Sait siis välttävän."); default: // Jos ei ollut mikään edellisistä System.out.println("Ei kelpaa arvosanaksi"); Anna arvosanasi (k, h, t tai v): t Sait siis tyydyttävän Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-15 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-16

Toistolauseet while (ehto) { while (ehto); for (alkutoimet; ehto; lopputoimet) { Toistolauseet Javan toistolauseet ovat alkuehtoinen while loppuehtoinen do-while askeltava for Millä tahansa niistä voi toteuttaa kaikki toistotilanteet Eri lauseilla kuitenkin omat käyttöalueensa Lue kirjasta s. 71-84 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-17 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-18 while-lause while (ehto) { ehto lauseet false Kun ohjelman suoritus tulee while-lauseeseen: Evaluoi ehto Jos ehto on false, jatka suoritusta while-lausetta seuraavasta lauseesta (ohita lauseosa) Jos ehto on suorita lauseosassa olevat lauseet Palaa taas tutkimaan ehtoa Muista vaikuttaa ehtoon Lauseosan muutettava jotain ehdossa esiintyvää muuttujaa, jotta ehto saa lopulta arvon false muuten suoritus jää ikuiseen silmukkaan while (rahaa > 100) { ostacd(); rahaa = rahaa - maksu; Ole tarkkana lopetusehdon kanssa, varo off-by-one virhettä. Alkuehtoinen toisto evaluoi ensin ehto, päätä sitten pitääkö suorittaa lause-osan lauseet lauseosa suoritetaan 0 tai useampia kertoja Ehto evaluoitava jokaisen toistokerran jälkeen uudelleen Toisto päättyy, kun toiston jatkumisehto ei ole enää Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-19 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-20 public class CDnOsto { double rahaa, hinta; int lkm = 0; System.out.print("Paljonko rahaa käytössä? "); rahaa = Oma.lueDouble(); System.out.print("Paljonko CD maksaa?"); hinta = Oma.lueDouble(); while (rahaa >= hinta) { lkm++; rahaa = rahaa - hinta; System.out.println("Ostat " + lkm + ". CD:n\n" + "Rahaa on jäljellä: " + rahaa + " euroa."); Kirja s. 73 if (lkm==0) { System.out.println("Et saa yhtään CD:tä ); else { System.out.println("Sait rahoillasi " + lkm + " CD:tä."); Paljonko rahaa käytössä? 5.5 Paljonko CD maksaa? 1.5 Ostat 1. CD:n Rahaa on jäljellä 4 euroa. Ostat 2. CD:n Rahaa on jäljellä 2.5 euroa. Ostat 3. CD:n Rahaa on jäljellä 1 euroa. Sait rahoillasi 3 CD:tä. import javax.swing.*; Kirja s. 74 /* Tämä ohjelma tulostaa käyttäjältä pyydetyn kokonaisluvun kertotaulun */ public class KertotauluWhile { String kerrottavastr; int kerrottava, kertoja, tulo; String tuloskertotaulu = ""; kerrottavastr = JOptionPane.showInputDialog( "Anna luku, jonka kertotaulun haluat"); kerrottava = Integer.parseInt(kerrottavaStr); kertoja = 1; while (kertoja <= 10) { tulo = kertoja * kerrottava; tuloskertotaulu += kertoja + " * " + kerrottava + " = " + tulo + "\n"; kertoja++; JOptionPane.showMessageDialog(null, tuloskertotaulu); System.exit(0); Parametriksi voi antaa vain yhden merkkijonon, joten kaikki on kasattava valmiiksi yhtä kutsua varten. Saa sisältää tässäkin kohtaa katenointia (+ merkki) Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-21 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-22 Syötteen tarkistaminen Yleinen toistolauseen käyttöyhteys import java.util.scanner; public class Pisteet { static Scanner lukija=new Scanner(System.in) int pistemaara; int summa = 0; int lkm = 1; while (lkm <= 10) { System.out.print("Anna " + lkm + ". pistemäärä: "); pistemaara = lukija.nextint(); while (pistemaara < 0 pistemaara > 5) { System.out.print( "Ei kelpaa. Oltava välillä 0..5.\n" + "Anna " + lkm + ". pistemäärä uudestaan: "); pistemaara = lukija.nextint(); summa += pistemaara; lkm ++; System.out.println("Pistemäärien summa on " + summa); Kirja s. 75 Ohjelmoinnin perusteet / Auvo Häkkinen / K2011 while (ei viimeinen) { pyydä syöte while (syöte ei kelpaa) { tulosta virheilmoitus pyydä uusi syöte käsittele kelvollinen syöte Anna 1. pistemäärä: 6 Ei kelpaa. Oltava välillä 0..5 Anna 1. pistemäärä uudestaan: -1 Ei kelpaa. Oltava välillä 0..5 Anna 1. pistemäärä uudestaan: 5 Anna 2. pistemäärä: jne. Muista aina testata rajakohdat Pistemäärien summa on 15 3-23 Tällaiset tarkistukset sopii piilottaa metodiin, jolloin ne eivät tarpeettomasti hämärrä ohjelman rakennetta import java.util.scanner; public class Pisteet { Scanner lukija = new Scanner(System.in); public static int luepistemäärä(int lkm ) { System.out.print("Anna " + lkm + ". pistemäärä: "); int pistemäärä = lukija.nextint(); while (pistemäärä < 0 pistemäärä > 5) { System.out.print("Ei kelpaa. Oltava välillä 0..5.\n" + "Anna " + lkm + ". pistemäärä uudestaan: "); pistemäärä = lukija.nextint(); return pistemäärä; int pistemaara, summa = 0, lkm = 0; pyydä syöte while (syöte ei kelpaa) { tulosta virheilmoitus pyydä uusi syöte palauta kelvollinen syöte while (lkm <=10) { while (ei viimeinen) { lkm ++; lue ja tarkasta seuraava syöte pistemaara = luepistemäärä(lkm); käsittele kelvollinen syöte summa += pistemaara; System.out.println("Pistemäärien summa on " + summa); Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-24

do-while-lause while (ehto); Kun ohjelmassa tulee do-while-lause Suorita lauseosassa olevat lauseet Tutki sitten ehto Jos ehto on false, jatka suoritusta do-while-lausetta seuraavasta lauseesta Jos ehto on, palaa toiston alkuun suorittamaan uudelleen lauseosan lauseet Loppuehtoinen toisto lauseet ehto false suorita ensin lauseosa kertaalleen, päätä sitten pitääkö lause-osan lauseet suorittaa uudelleen lauseosa suoritetaan 1 tai useampia kertoja Ehto pitää evaluoida jokaisen toistokerran jälkeen uudelleen Toisto päättyy, kun toiston jatkumisehto ei ole enää Esimerkkejä Pyydä tunnuslukua, kunnes saat sen oikein Näkyvyysssäännöt: Ehtomuuttujan esittely ja tutkiminen aina do-while lauselohkon ulkopuolella! import java.util.scanner; Kirja s. 81 public class Tunnusluku { Scanner lukija = new Scanner(System.in) System.out.print("Anna tunnusluku: "); luku = lukija.nextint(); while (luku!= 1234); System.out.println("Tervetuloa"); Anna tunnusluku: 12 Anna tunnusluku: 9876 Anna tunnusluku: 1234 Tervetuloa Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-25 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-26 Ohjelma kysyy lopuksi, haluaako käyttäjä toistaa ohjelman uudelleen. Käyttäjä vastaa näppäilemällä kirjaimen k tai e. valitse oletustoiminto fiksusti public class Yhteenlaskukone { Kirja s. 81 int luku1, luku2; char vastaus; System.out.println("Anna kaksi kokonaislukua."); System.out.print("Ensimmäinen luku: "); luku1 = Oma.lueInt(); System.out.print("Toinen luku: "); luku2 = Oma.lueInt(); System.out.println("Summa on: " + (luku1+luku2)); System.out.print("\nJatketaanko (k/e): "); vastaus = Oma.lueChar(); while (vastaus!= 'e'); Anna kaksi kokonaislukua. Ensimmäinen luku: 7 Toinen luku: 8 Summa on: 15 Jatketaanko (k/e)? e Kumpi ompi oivempi? System.out.print("Anna luku väliltä 1-10: "); while (luku < 1 luku > 10) { System.out.println ("Luku virheellinen."); System.out.print ("Anna luku väliltä 1-10: "); System.out.println ("Annoit luvun " + luku); Virhetarkistuksen voisi helposti irrottaa omaksi metodikseen System.out.print("Anna luku väliltä 1-10: "); if (luku < 1 luku > 10) System.out.println ("Luku virheellinen."); while (luku < 1 luku > 10); System.out.println ("Annoit luvun " + luku); int luku = annaluku(); System.out.println ("Annoit luvun " + luku); Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-27 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-28 for-lause for (alkutoimet ; ehto ; lopputoimet){ alkutoimet ehto lauseet Tee ensin kertaalleen alkutoimet tavallisesti toistolaskurin esittely + alkuarvo false lopputoimet Tarkista sitten ehdon voimassaolo jos, jatka suoritusta toistettavilla lauseilla jos false, jatka suoritusta koko for-lausetta seuraavasta lauseesta ehto tutkii tavallisesti toistolaskurin arvoa Kun yksi toiston lauseet tehty, suorita toistokerran lopputoimet muuttaa yleensä toistolaskurin arvoa Palaa sitten taas tutkimaan ehtoa Toisto päättyy, kun toiston jatkumisehto ei ole enää laskuri ylittänyt sovitun loppuarvon joku muu syy muuttaa ehdon arvoksi false Toistolaskuri Toistokertojen määrää hallitaan tavallisesti toistomuuttujan avulla Alkutoimet: laskurin määrittely ja alkuarvon asettaminen esim. int i = 1 tehdään vain ensimmäisellä kerralla Ehto: laskurin arvon vertaaminen loppuarvoon esim. i <= 10 Lopputoimet: laskurin arvon askeltaminen esim. i++ tehdään jokaisen toistokerran jälkeen Toistomuuttujan voi määritellä myös for-lauseen ulkopuolella, mutta Tavallisesti laskuria tarvitaan vain for-rakenteessa, joten on perusteltua määritellä se for-rakenteen sisällä Tällöin se on olemassa vain for lauseen sisällä (näkyvyyssäännöt!) Toistomuuttujan vakiintunut tunnus on i Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-29 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-30 for-lausetta käytetään erityisesti silloin, kun toistojen määrä tiedetään ennen kuin toistot edes aloitetaan vakio tai voidaan laskea muuttujien avulla Esimerkiksi halutaan sademäärätiedot viikon jokaiselle päivälle joten: tiedetään, että sademääriä on seitsemän kappaletta joten: ohjelma pyytää sademääriä seitsemän kertaa halutaan käsitellä taulukon kaikki 12 alkiota joten taulukon indeksit saavat arvot 0-11 halutaan käsitellä (esim. tulostaa) peräkkäiset luvut 1-10 for (int i=1; i <=10; i++) { System.out.println(i); 1 2 3 4 5 6 7 8 9 10 Esimerkki Metodi, joka laskee summalausekkeen 1+2+3+...+N arvon, kun N välitetään metodille parametrina public class Laskuri { public static int summa(int n) { int sum=0; for (int i = 1; i <= n; i++) { sum += i; return sum; int z; int x = 10; z = summa(5); System.out.println(Summa on " + z); System.out.println(Summa on " + summa(x)); Summa on 15 Summa on 55 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-31 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-32

for vs. while for-lauseen voisi korvata while-lauseella for (alkutoimet ; ehto ; lopputoimet){ alkutoimet; while (ehto) { lopputoimet; for-rakenteen etu siinä, että toiston ohjausosat eli toistomuuttujan määrittely ja alustus, toiston jatkumisehto sekä toistomuuttujan kasvatus saadaan aina lähelle toisiaan (samalle riville) Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-33 Potenssit while-rakennetta ja for-rakennetta käyttäen public class PotenssitWhile { Kirja s. 78 int i=1; // alkutoimet while (i<=10) { // ehto System.out.println( i + potenssiin 2 on + i*i); i++; // lopputoimet vrt. public class Potenssit { // alkutoimet ; ehto ; lopputoimet for (int i=1; i<=10; i++) { System.out.println(i + potenssiin 2 on + i*i); 1 potenssiin 2 on 1 2 potenssiin 2 on 4 3 potenssiin 2 on 9 4 potenssiin 2 on 16 5 potenssiin 2 on 25 6 potenssiin 2 on 36 7 potenssiin 2 on 49 8 potenssiin 2 on 64 9 potenssiin 2 on 81 10 potenssiin 2 on 100 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-34 for-lauseen kontrolliosasta Vaikka for-lauseen kontrollilausekkeessa on kolme osaa (laskurin alustus, toistoehto, laskurin askellus), niistä mikä tahansa puuttua puolipisteet sensijaan pitää olla aina mukana Esimerkiksi päättymättömän silmukan voi kirjoittaa muotoon for ( ; ; ) { Tällaisenkin toistosilmukan sisältä pääsee pois break-lauseella return-lauseella tai System.exit() metodin kutsulla for-lauseen alku- ja lopputoimiin voi kirjoittaa useita lauseita tällöin lauseet erotetaan toisistaan poikkeuksellisesti pilkulla Pilkkuoperaattoria ei voi käyttää missään muussa yhteydessä public class ParillisetPotenssit { Kirja s. 78 for (int i=1, int j=0; i<=10; i++, j+=2) { System.out.println(i + potenssiin + j + = + Math.pow(i,j)); 1 potenssiin 0 = 1.0 2 potenssiin 2 = 4.0 3 potenssiin 4 = 81.0 4 potenssiin 6 = 4096.0 5 potenssiin 8 = 390625.0 6 potenssiin 10 = 6.0466176E7 7 potenssiin 12 = 1.3841287201E10 8 potenssiin 14 = 4.398046511104E12 9 potenssiin 16 = 1.853020188851841E15 10 potenssiin 18 = 1.0E18 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-35 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-36 Sisäkkäiset for-lauseet for-lauseita on usein tarve kirjoittaa sisäkkäin Sisäkkäisten silmukoiden toistomuuttujat tapana nimetä tunnuksilla i, j ja k for (int i=0; i<3; i++) { System.out.print("i=" + i + ": "); for (int j=0; j<3; j++) { System.out.print("j=" + j + " "); System.out.println(); i=0: j=0 j=1 j=2 i=1: j=0 j=1 j=2 i=2: j=0 j=1 j=2 public class KertotauluFor { vrt. kirja s. 80 // Käyttää vakioita määrittelemään rajat final int ALARAJA1=1, YLARAJA1=10; final int ALARAJA2=1, YLARAJA2=10; int tulo; for (int i=alaraja1; i<=ylaraja1; i++) { for (int k=alaraja2; k<=ylaraja2; k++) { tulo = k*i; System.out.printf("%3s ", tulo); System.out.print("\n"); Muotoiltu tulostus System.out.printf() ks. Java SE 6 API Tehtävä: Tee versio, joka kysyy ala- ja ylärajat 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-37 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-38 Erityislauseet toistosta poistumiseen break continue Javassa on toistorakenteiden katkaisulauseet break lopettaa toiston: suoritus jatkuu toistoa seur. lauseesta continue vie takaisin toiston alkuun: aloita seuraava toistokierros Tavallisesti ohjelman logiikka kannattaa suunnitella s.e. silmukan suorituksen päättyminen näkyy ehto-osasta Joskus break- ja continue-lauseiden käyttö voi jopa selkeyttää ohjelman rakennetta esim. kun toistorakenne vaatisi esivalmisteluja ennen ehdon tarkistusta esim. "lue luku" ennen kuin ehto voidaan tarkistaa Lauseiden käyttöä ei tässä varsinaisesti opetella saati suositella ilman näitäkin pärjäämme vallan mainiosti Lue kirjasta s. 95-96 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-39 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-40

public class Break{ vrt. kirja s. 95 int summa = 0; System.out.print("Anna luku (lopetus on -1): "); if (luku < 0) //katkaisee silmukan suorituksen välittömästi summa += luku; while (luku >= 0); System.out.println("Summa on " + summa); public class BreakToWhile{ vrt. kirja s. 96 int summa = 0; System.out.print("Anna luku (lopetus on -1): "); if (luku >= 0) summa += luku; while (luku >=0); System.out.println("Summa on " + summa); public class Continue { int luku = -1; while (luku < 10) { luku++; if (luku % 2 == 1) continue; // Takaisin silmukan alkuun System.out.println("Luku on " + luku); vrt. kirja s. 96 Mitä ylläoleva ohjelma tekee? Esitä joutessais sama ilman continue-lausetta! Vihje: for-lause Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-41 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-42 return Lue kirjasta s. 95-96 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 3-43