4. if-rakenne

if-rakenne

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.

Esimerkki: Salasana

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!

Esimerkki: Pituus

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

Ehdot

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).

Monta ehtoa

Ehtoja voidaan yhdistää seuraavilla merkinnöillä:

Lisäksi ehdon voi muuttaa käänteiseksi seuraavasti:

Esimerkki: Tunnus ja salasana

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...

Pitkä if-rakenne

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.

Esimerkki: Iän tarkistaminen

Seuraava ohjelma kysyy käyttäjän iän ja tulostaa siitä kommentin alla olevan taulukon mukaisesti.

ikäkommentti
alle 0Ikä ei ole mahdollinen!
0...30Olet vielä nuori!
31...70Olet keski-ikäinen!
71...120Olet jo vanha!
yli 120Ikä 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

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.

Merkkijonojen vertailu

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!");
}