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