next up previous contents index
Next: Hakemisto Up: Valintakäsky (if) Previous: Koottu lause   Sisältö   Hakemisto

Sisäkkäisiä if-käskyjä

Myös if-käskyn sisällä voi olla toinen if-käsky. Tarkastellaan esimerkkiä, jossa painoindeksin laskun yhteydessä halutaan antaa varoitus, jos käyttäjä on alipainoinen (painoindeksi alle 19) tai ylipainoinen (painoindeksi vähintään 25). Ohjelma voidaan tällöin kirjoittaa seuraavasti:

public class Painoindeksi2 {
  public static void main(String[] args) {
    double paino, pituus, painoindeksi;

    System.out.println("Anna painosi kiloissa");
    paino = Lue.dluku();
    System.out.println("Anna pituutesi metreissä");
    pituus = Lue.dluku();
    if (pituus != 0) {
      painoindeksi = paino / (pituus * pituus);
      System.out.println("Painoindeksisi on " + painoindeksi);
      if (painoindeksi < 19)
        System.out.println("Olet alipainoinen");
      if (painoindeksi >= 25)
        System.out.println("Olet ylipainoinen");
    }
    else 
      System.out.println("Virheellinen pituus - painoindeksiä ei voi laskea");
  }
}

Esimerkissä sisemmät if-käskyt suoritetaan vain silloin, jos ulomman if-käskyn ehto on tosi.

Koska kaikkiin if-käskyihin ei kuulu else-osaa, voidaan sisäkkäisten if-käskyjen yhteydessä joskus joutua miettimään, kuuluuko joku else-osa sisempään vai ulompaan if-käskyyn. Epäselvyyden poistamiseksi on sovittu seuraava sääntö: else-osa kuuluu aina viimeiseen sellaiseen if-käskyyn, johon ei vielä kuulu else-osaa.

Joskus if-käskyjä joudutaan ketjuttamaan monta peräkkäin. Täydennetään painoindeksin laskevaa ohjelmaa siten, että se tulostaa lopuksi, onko käyttäjä alipainoinen (painoindeksi alle 19), normaalipainoinen (painoindeksi vähintään 19, mutta alle 25), lievästi ylipainoinen (painoindeksi vähintään 25, mutta alle 30), merkittävästi ylipainoinen (painoindeksi vähintään 30, mutta alle 35), vaikeasti ylipainoinen (painoindeksi vähintään 35, mutta alle 40) vai sairaalloisesti ylipainoinen (painoindeksi vähintään 40). Ohjelmasta tulee tällöin seuraavan näköinen:

public class Painoindeksi3 {
  public static void main(String[] args) {
    double paino, pituus, painoindeksi;

    System.out.println("Anna painosi kiloissa");
    paino = Lue.dluku();
    System.out.println("Anna pituutesi metreissä");
    pituus = Lue.dluku();
    if (pituus != 0) {
      painoindeksi = paino / (pituus * pituus);
      System.out.println("Painoindeksisi on " + painoindeksi);
    }
    else{
      painoindeksi = 0; // annetaan arvo, jotta jatkossa ei tulisi ongelmia
      System.out.println("Virheellinen pituus - painoindeksiä ei voi laskea");
    }
    if (painoindeksi > 0 && painoindeksi < 19)
      System.out.println("Olet alipainoinen");
    else {
      if (painoindeksi >= 19 && painoindeksi < 25)
        System.out.println("Painosi on normaali");
      else {
        if (painoindeksi >= 25 && painoindeksi < 30)
          System.out.println("Olet lievästi ylipainoinen");
        else {
          if (painoindeksi >= 30 && painoindeksi < 35)
            System.out.println("Olet merkittävästi ylipainoinen");
          else {
            if (painoindeksi >= 35 && painoindeksi < 40)
              System.out.println("Olet vaikeasti ylipainoinen");
            else {
              if (painoindeksi >= 40 )
                System.out.println("Olet sairaalloisesti ylipainoinen");
            }
          }
        }
      }
    }
  }
}
Operaattori && yllä olevassa koodissa on ja-operaattori. Lausekkeen painoindeksi >= 19 && painoindeksi < 25 arvo on true, jos sekä lauseke painoindeksi >= 19 että lauseke painoindeksi < 25 ovat tosia.

Yllä oleva ohjelma on kyllä ihan oikein, mutta epäselvän näköinen. Sen vuoksi tällainen rakenne kirjoitetaan yleensä toisin:

public class Painoindeksi4 {
  public static void main(String[] args) {
    double paino, pituus, painoindeksi;

    System.out.println("Anna painosi kiloissa");
    paino = Lue.dluku();
    System.out.println("Anna pituutesi metreissä");
    pituus = Lue.dluku();
    if (pituus != 0) {
      painoindeksi = paino / (pituus * pituus);
      System.out.println("Painoindeksisi on " + painoindeksi);
    }
    else {
      painoindeksi = 0;
      System.out.println("Virheellinen pituus - painoindeksiä ei voi laskea");
    }
    if (painoindeksi > 0 && painoindeksi < 19)
      System.out.println("Olet alipainoinen");
    else if (painoindeksi >= 19 && painoindeksi < 25)
      System.out.println("Painosi on normaali");
    else if (painoindeksi >= 25 && painoindeksi < 30)
      System.out.println("Olet lievästi ylipainoinen");
    else if (painoindeksi >= 30 && painoindeksi < 35)
      System.out.println("Olet merkittävästi ylipainoinen");
    else if (painoindeksi >= 35 && painoindeksi < 40)
      System.out.println("Olet vaikeasti ylipainoinen");
    else if (painoindeksi >= 40 )
      System.out.println("Olet sairaalloisesti ylipainoinen");
  }
}


next up previous contents index
Next: Hakemisto Up: Valintakäsky (if) Previous: Koottu lause   Sisältö   Hakemisto
Kerttu Pollari-Malmi 2003-01-27