1. Operatorul cu variante multiple:switch

Java are un alt operator interesant pe care l-a moștenit de la bunicul său (C++). Vorbim despre switchdeclarație. L-am putea numi și un operator cu alegere multiplă. Pare puțin greoi:

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

O expresie sau o variabilă este indicată între paranteze. Dacă valoarea expresiei este value1, mașina Java începe să execute code1. Dacă expresia este egală cu value2, execuția sare la code2. Dacă expresia este egală cu value3, atunci code3este executată.

Exemplu:

Cod Ieșire de consolă
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. breakdeclarație înswitch

O caracteristică importantă a unei switchinstrucțiuni este că programul pur și simplu sare la linia necesară (la blocul de cod necesar) și apoi execută toate blocurile de cod până la sfârșitul switch. Nu numai blocul de cod corespunzător valorii din switch, ci toate blocurile de cod până la sfârșitul switch.

Exemplu:

Cod Ieșire de consolă
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

Având în vedere o temperatură de 36, programul va introduce switchinstrucțiunea, va sări și va executa primul bloc de cod (primul caz), apoi va executa cu bucurie restul blocurilor de cod.

Dacă doriți să executați un singur bloc de cod — blocul de cod asociat cu cazul potrivit — atunci trebuie să încheiați blocul cu o breakinstrucțiune;

Exemplu:

Cod Ieșire de consolă
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

Puteți omite breakîn ultimul caz al instrucțiunii switch, deoarece acel bloc este ultimul cu sau fără o instrucțiune break.


3. Acțiune implicită:default

Un alt punct important. Ce se întâmplă dacă niciunul dintre cazurile enumerate în paranteză nu se switchpotrivește cu expresia din paranteze?

Dacă nu se găsește un caz care se potrivește, atunci restul instrucțiunii switcheste omis, iar programul va continua execuția după acolada care încheie instrucțiunea switch.

Acestea fiind spuse, puteți face ca o switchdeclarație să se comporte ca ramura else dintr-o if-elsedeclarație. Pentru a face acest lucru, utilizați defaultcuvântul cheie.

Dacă niciunul dintre cases-urile din switchbloc nu se potrivește cu valoarea expresiei și are switchun defaultbloc, blocul implicit va fi executat. Exemplu:

Cod Ieșire de consolă
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. Comparând switchșiif-else

Afirmația switcheste oarecum asemănătoare cu o if-elseafirmație, doar că mai complicată.

Puteți oricând rescrie codul unei declarații ca instrucțiuni switchmultiple . ifExemplu:

Cod cu comutator Codați cu if-else
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");
}

Codul din stânga va funcționa exact la fel ca codul din dreapta.

Un lanț de if-elseinstrucțiuni multiple este de preferat atunci când o ifinstrucțiune conține diverse expresii complexe în fiecare caz separat.



5. Ce expresii pot fi folosite într-un switchenunț?

Nu toate tipurile pot fi folosite ca caseetichete într-o switchdeclarație. Puteți folosi literale de următoarele tipuri:

  • tipuri întregi: byte, short, int,long
  • char
  • String
  • orice enumtip

Nu puteți utiliza alte tipuri ca etichete de caz.

Exemplu de utilizare a unei declarații enumîn interiorul unei switchdeclarații:

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;
}

Notă: Dacă utilizați o instrucțiune enumîn interiorul unei switchinstrucțiuni, nu trebuie să scrieți numele clasei în fața fiecărei valori din caseetichete. Este suficient să scrieți doar valoarea.