1. A feleletválasztós operátor:switch

A Java-nak van egy másik érdekes operátora, amelyet a nagypapától (C++) örökölt. A nyilatkozatról beszélünk switch. Nevezhetnénk feleletválasztós operátornak is. Kicsit nehézkesnek tűnik:

switch(expression)
{
   case value1: code1;
   case value2: code2;
   case value3: code3;
}

Egy kifejezés vagy változó a zárójelben van feltüntetve. Ha a kifejezés értéke value1, akkor a Java gép megkezdi a végrehajtást code1. Ha a kifejezés egyenlő a -val value2, a végrehajtás a -ra ugrik code2. Ha a kifejezés egyenlő -val value3, akkor code3végrehajtódik.

Példa:

Kód Konzol kimenet
int temperature = 38;

switch(temperature)
{
   case 36: System.out.println("Low");
   case 37: System.out.println("Normal");
   case 38: System.out.println("High");
} 
High

2. breaknyilatkozat beswitch

Az utasítások fontos jellemzője switch, hogy a program egyszerűen a kívánt sorra ugrik (a szükséges kódblokkra), majd az összes kódblokkot végrehajtja a switch. Nem csak az értéknek megfelelő kódblokk switch, hanem az összes kódblokk a kód végéig switch.

Példa:

Kód Konzol kimenet
int temperature = 36;

switch(temperature)
{
   case 36: System.out.println("Low");
   case 37: System.out.println("Normal");
   case 38: System.out.println("High");
} 
Low
Normal
High

36-os hőmérséklet mellett a program beírja az switchutasítást, átugrik és végrehajtja az első kódblokkot (az első eset), majd vidáman végrehajtja a többi kódblokkot.

Ha csak egy kódblokkot akar végrehajtani – az egyező esethez tartozó kódblokkot –, akkor a blokkot egy utasítással kell befejeznie break;

Példa:

Kód Konzol kimenet
int temperature = 36;

switch(temperature)
{
   case 36:
      System.out.println("Low");
      break;
   case 37:
      System.out.println("Normal");
      break;
   case 38:
      System.out.println("High");
}
Low

breakAz utasítás utolsó esetben elhagyható switch, mivel ez a blokk az utolsó break utasítással vagy anélkül.


3. Alapértelmezett művelet:default

Egy másik fontos szempont. Mi történik, ha a felsorolt ​​esetek egyike sem egyezik switcha zárójelben lévő kifejezéssel?

Ha nem található egyező eset, akkor az switchutasítás többi része kimarad, és a program az switchutasítást lezáró kapcsos zárójel után folytatja a végrehajtást.

Ennek ellenére azt is megteheti, hogy egy switchnyilatkozat úgy viselkedik, mint egy nyilatkozatban az else ág if-else. Ehhez használja a defaultkulcsszót.

caseHa a blokkban lévő s-ek egyike sem switchegyezik a kifejezés értékével, és switchvan defaultblokkja, akkor az alapértelmezett blokk kerül végrehajtásra. Példa:

Kód Konzol kimenet
int temperature = 40;
switch(temperature)
{
   case 36:
      System.out.println("Low");
      break;
   case 37:
      System.out.println("Normal");
      break;
   case 38:
      System.out.println("High");
      break;
   default:
      System.out.println("Call an ambulance");
}
Call an ambulance

4. Összehasonlítása switchésif-else

Az switchállítás némileg hasonlít egy if-elseállításhoz, csak bonyolultabb.

Egy utasítás kódját mindig átírhatja switchtöbb ifutasításként. Példa:

Kód kapcsolóval Kódolja az if-else-t
int temperature = 40;
switch(temperature)
{
   case 36:
      System.out.println("Low");
      break;
   case 37:
      System.out.println("Normal");
      break;
   case 38:
      System.out.println("High");
      break;
   default:
      System.out.println("Call an ambulance");
} 
int temperature = 40;

if (temperature == 36)
{
   System.out.println("Low");
}
else if (temperature == 37)
{
   System.out.println("Normal");
}
else if (temperature == 38)
{
   System.out.println("High");
}
else
{
   System.out.println("Call an ambulance");
}

A bal oldali kód pontosan ugyanúgy fog működni, mint a jobb oldali kód.

A több utasításból álló lánc if-elseelőnyösebb, ha egy ifutasítás minden esetben különböző összetett kifejezéseket tartalmaz.



5. Milyen kifejezések használhatók egy switchállításban?

Nem minden típus használható címkeként caseegy switchutasításban. A következő típusú literálokat használhatja:

  • egész típusok: byte, short, int,long
  • char
  • String
  • bármilyen enumtípusú

Nem használhat más típust tokcímkeként.

enumPélda belső utasítás használatára switch:

Day day = Day.MONDAY;
switch (day)
{
   case MONDAY:
      System.out.println("Monday");
      break;
   case TUESDAY:
      System.out.println("Tuesday");
      break;
   case WEDNESDAY:
      System.out.println("Wednesday");
      break;
   case THURSDAY:
      System.out.println("Thursday");
      break;
   case FRIDAY:
      System.out.println("Friday");
      break;
   case SATURDAY:
      System.out.println("Saturday");
      break;
   case SUNDAY:
      System.out.println("Sunday");
      break;
}

enumMegjegyzés: Ha belső utasítást használ switch, akkor nem kell az osztálynevet a címkék minden értéke elé írnia case. Elég csak az értéket felírni.