Ilkka Koivistoinen 13.02.2002

Edellinen

Seuraava

6.2 Switch -tapauslause
(katso myös http://java.sun.com/docs/books/tutorial/java/nutsandbolts/switch.html)

If – else –rakenne usean eri vaihtoehdon yhteydessä tuottaa vaikeasti luettavaa koodia. Tällainen voidaan korvata switch –tapauslauseella. Seuraavassa on esimerkkiohjelma, jossa näppäimistöltä luetaan kuukauden numero ja sen jälkeen tulostetaan vuoden aika. Ensin ohjelma on tehty if – else –rakenteella ja sitten case –lauseella.

Esimerkki 15.

Vuodenajat. Versio 1

import Lue;
public class vuodenajat1
{
   public static void main(String args[])
   {
     int KuukaudenNumero;
     System.out.println("Anna kuukauden numero (1 – 12) ");
     KuukaudenNumero = Lue.kluku();
     if (KuukaudenNumero==1 || KuukaudenNumero==2 || KuukaudenNumero==12)
       System.out.println("on talvi");
     if (KuukaudenNumero==3 || KuukaudenNumero==4 || KuukaudenNumero==5)
       System.out.println("on kevät");
     if (KuukaudenNumero==6 || KuukaudenNumero==7 || KuukaudenNumero==8)
       System.out.println("on kesä");
     if (KuukaudenNumero==9 || KuukaudenNumero==10 || KuukaudenNumero==11)
       System.out.println("on syksy");
     if (KuukaudenNumero<1 || KuukaudenNumero>12)
       System.out.println("Mikä tälläinen kuukausi oikein on?");
   }
}

Jos olisi käytetty if - else {if - else {...}}, niin olisi päästy vielä sekavampaan tilanteesen. Oikosulkurakennetta käytettäessä koodista tulee kylläkin nopeampaa. (Lausesulut eivät muuten ole pakollisisa)

Vuodenajat. Versio 2.

public class E15
{
   public static void main(String args[])
   {
     System.out.println("Anna kuukauden numero (1 – 12) ");
     int KuukaudenNumero = Lue.kluku();
     switch (KuukaudenNumero)
     {
       case 1 :
       case 2 :
       case 12: System.out.println("on talvi");
                     break;
       case 3 :
       case 4 :
       case 5 : System.out.println("on kevät");
                    break;
       case 6 :
       case 7 :
       case 8 : System.out.println("on kesä");
                    break;
       case 9 :
       case 10:
       case 11: System.out.println("on syksy");
                     break;
      default: System.out.println("Mikäs kuukausi tämä on?");
     }
   }
}

Switch lauseen huono puoli on sen käytön rajoittuminen vain lueteltavissa oleviin indeksityyppeihin (byte, char, short, int) (edellisessä esimerkissä KuukaudenNumero ei voi olla float tai edes long puhumattakaan tyypistä String) ja toisaalta ainoa vertailuoperaattori on ==. Hyvä puoli näkyy esimerkistä. Koodista tulee paljon luettavampaa. Huomaa kaksoispiste ja puolipiste jokaisen tapauksen jälkeen. Jos mikään case ei toteudu annetulle muuttujanarvolle, toteutetaan default haara. default ei ole kuitenkaan pakollinen. Jos jokin switch –testin case -vaihtoehdoista täsmää, ohjelman suoritus jatkuu siitä case –kohdasta ja etenee niin pitkälle kunnes tulee break, jonka jälkeen ohjelman suoritus jatkuu Switch –lauseen jälkeisestä lauseesta.

6.2.1 Tehtäviä

  1. Tee ohjelma joka lukee näppäimistöltä viikonpäivän (1 = sunnuntai, 2 = maanantai ,…, 7 = lauantai) ja ilmoittaa, onko annettuna päivänä koulua (arkipäivä) vai ei (viikonloppu). Kommentoi myös muut syöttöarvot.
  2. * Tee ohjelma joka lukee näppäimistöltä yhden merkin ja ilmoittaa onko se kirjain, numero vai joku muu (Vihje: Katso Lue.java tiedostosta).
  3. * Tee ohjelma joka lukee näppäimistöltä ihmisen iän ja ilmoittaa onko hän vauva (0,2), lapsi (3..10), nuori (11..18), nuoriaikuinen (19..25), aikuinen (25..60) vai eläkeläinen (61..130). Kommentoi myös muut syöttöarvot.
  4. Tee ohjelma joka lukee näppäimistöltä kurssin arvosanan ja ilmoittaa onko se heikko (4), välttävä (5,6), hyvä (7,8) vai kiitettävä (9,10). Kommentoi myös muut syöttöarvot.

Vastaukset

Ilkka Koivistoinen 13.02.2002

Edellinen

Seuraava