if-rakenteen avulla ohjelman toiminnan saa riippumaan muuttujien arvoista.
Rakenteen tavallisimmat muodot ovat seuraavat:
Muoto 1:
if ([ehto]) { [koodi] }
Tässä ohjelma suorittaa kohdassa [koodi] olevan koodin, jos [ehto] pitää paikkansa.
Muoto 2:
if ([ehto]) { [koodi1] } else { [koodi2] }
Tässä ohjelma suorittaa kohdassa [koodi1] olevan koodin, jos [ehto] pitää paikkansa, ja muussa tapauksessa kohdassa [koodi2] olevan koodin.
Seuraava ohjelma kysyy käyttäjältä salasanan. Sitten ohjelma kertoo, oliko salasana oikein. Tässä oikea salasana on "kissa".
System.out.print("Anna salasana: "); String salasana = input.nextLine(); if (salasana.equals("kissa")) { System.out.println("Oikein meni!"); } else { System.out.println("Väärin meni!"); }
Esimerkkejä ohjelman suorituksesta:
Anna salasana: kissa Oikein meni!
Anna salasana: koira Väärin meni!
Seuraava ohjelma varmistaa, että muuttujalle pituus
ei tule
negatiivista arvoa. Jos pituus on alle 0, ohjelma muuttaa sen arvoksi 0.
System.out.print("Anna pituus: "); int pituus = Integer.parseInt(input.nextLine()); if (pituus < 0) { pituus = 0; } System.out.println("Pituus: " + pituus);
Esimerkkejä ohjelman suorituksesta:
Anna pituus: 5 Pituus: 5
Anna pituus: -2 Pituus: 0
if-rakenteessa oleva ehto liittyy yleensä muuttujien arvoon. Äskeisissä
esimerkeissä ehdot olivat "muuttujan salasana
arvo on kissa"
ja "muuttujan pituus
arvo on alle 0".
Merkkijonoista halutaan yleensä tarkistaa, ovatko ne samat. Tämä onnistuu
equals
-komennolla esimerkin mukaisesti.
Lukuarvoista halutaan yleensä tarkistaa niiden suuruusjärjestys. Käytössä
ovat merkinnät ==
(luvut ovat samat), !=
(luvut eivät
ole samat), <
(vasen luku on pienempi), >
(vasen luku on suurempi) <=
(vasen luku on sama tai pienempi) ja
>=
(vasen luku on sama tai suurempi).
Ehtoja voidaan yhdistää seuraavilla merkinnöillä:
[ehto1] && [ehto2]
[ehto1] || [ehto2]
Lisäksi ehdon voi muuttaa käänteiseksi seuraavasti:
![ehto]
Seuraava ohjelma vaatii, että käyttäjä antaa oikean tunnuksen (aapeli) ja oikean salasanan (kissa).
System.out.print("Anna tunnus: "); String tunnus = input.nextLine(); System.out.print("Anna salasana: "); String salasana = input.nextLine(); if (tunnus.equals("aapeli") && salasana.equals("kissa")) { System.out.println("Oikein meni!"); System.out.println("Tervetuloa järjestelmään..."); } else { System.out.println("Väärin meni!"); System.out.println("Yritä vielä uudestaan..."); }
Esimerkkejä ohjelman suorituksesta:
Anna tunnus: aapeli Anna salasana: kissa Oikein meni! Tervetuloa järjestelmään...
Anna tunnus: aapeli Anna salasana: koira Väärin meni! Yritä vielä uudestaan...
Anna tunnus: maija Anna salasana: koira Väärin meni! Yritä vielä uudestaan...
if-rakenteesta on myös olemassa pitkä muoto, jossa voi olla monia ehtoja.
Muoto 3:
if ([ehto1]) { [koodi1] } else if ([ehto2]) { [koodi2] } else if ([ehto3]) { [koodi3] ... } else if ([ehton]) { [koodin] }
Tässä ohjelma valitsee ensimmäisen ehdon, joka pitää paikkansa, ja suorittaa
sitä vastaavan koodin. Lopussa voi olla vielä else
-osa, jonne
mennään, jos mikään ehto ei pidä paikkaansa.
Seuraava ohjelma kysyy käyttäjän iän ja tulostaa siitä kommentin alla olevan taulukon mukaisesti.
ikä | kommentti |
---|---|
alle 0 | Ikä ei ole mahdollinen! |
0...30 | Olet vielä nuori! |
31...70 | Olet keski-ikäinen! |
71...120 | Olet jo vanha! |
yli 120 | Ikä ei ole mahdollinen! |
System.out.print("Kuinka vanha olet? "); int ika = Integer.parseInt(input.nextLine()); if (ika < 0 || ika > 120) { System.out.println("Ikä ei ole mahdollinen!"); } else if (ika <= 30) { System.out.println("Olet vielä nuori!"); } else if (ika <= 70) { System.out.println("Olet keski-ikäinen!"); } else { System.out.println("Olet jo vanha!"); }
Esimerkkejä ohjelman suorituksesta:
Kuinka vanha olet? 15 Olet vielä nuori!
Kuinka vanha olet? 47 Olet keski-ikäinen!
Kuinka vanha olet? -2 Ikä ei ole mahdollinen!
Varmista, että ymmärrät kokonaan yllä olevan koodin toiminnan. Ohjelma valitsee ensimmäisen paikkansa pitävän ehdon ja suorittaa sitä vastaavan koodin. Myöhempien ehtojen koodeja ei suoriteta, vaikka ehdot pitäisivät paikkansa.
Sisentäminen tarkoittaa, että koodirivien alkuun laitetaan välilyöntejä koodin rakenteen mukaisesti. Esimerkiksi if-rakenteen sisällä oleva koodi on tapana sisentää, jolloin koodista näkee helposti, miten if-rakenne on muodostunut.
Sisentäminen saattaa tuntua aluksi turhalta, mutta sitä oppii kyllä arvostamaan myöhemmin. NetBeansin avulla sisentämisen opetteleminen on helppoa, koska voit painaa Shift + Alt + F, jolloin koodi sisentyy automaattisesti.
Seuraava koodi vaikuttaa luontevalta, mutta se ei toimi!
if (salasana == "kissa") { System.out.println("Oikein meni!"); }
Vaikka Java hyväksyy koodin, if-rakenne ei tunnista tilannetta, jossa
muuttujassa salasana
on merkkijono "kissa"
.
Ilmiön syy selviää myöhemmin kurssilla, mutta tällä hetkellä riittää tietää, että seuraava koodi toimii:
if (salasana.equals("kissa")) { System.out.println("Oikein meni!"); }