Sunteți pe pagina 1din 13

Curs: Core Java Programming

Modul: Controlul fluxului


Unitate: Structura switch

Structura Switch-Case a fost deja menţionată în lecţia precedentă.


Pentru structura aceasta s-ar putea spune că este derivată din
structura if-else, deoarece conţine o logică asemănătoare, dar este
mai clară şi este specializată pentru nişte cazuri speciale, respectiv
atunci când se aşteaptă o stare din lista stărilor unei variabile.

Să spunem că dorim să facem câteva verificări asupra unei variabile.


Putem face aceasta oricând cu structura if-else:

int x = 5;
if(x==1)
System.out.println("x este unu");
else if(x==2)
System.out.println("x este doi");
else if(x==3)
System.out.println("x este trei");
else
System.out.println("x nu este nici unu, nici doi, nici
trei");

Însă, aceasta nu este neapărat cea mai bună şi cea mai bine vizibilă
soluţie pentru astfel de cazuri. În schimb, putem folosi comanda
Switch.

Comanda Switch

Comanda aceasta se foloseşte în situaţii în care condiţia testată poate


să aibă mai multe valori, de care depinde executarea în continuare a
programului. Comanda switch are următoarea sintaxă:

switch (variabil?) {
case value 1:
commands 1
break;
case value 2:
commands 2

© Copyright Link group 1 / 13


Curs: Core Java Programming
Modul: Controlul fluxului
Unitate: Structura switch

break;
default:
commands 3;
}

La structura Switch, întâi se calculează expresia, şi apoi valoarea


obţinută se compară cu valorile declarate în marcajele Case. Dacă
valoarea expresiei este egală cu o valoare din marcajul Case, se
execută grupul de comenzi care urmează după acest marcaj. Dacă
valoarea expresiei este diferită de toate celelalte declarate, se execută
grupul de comenzi de după marcajul Default.

Structura aceasta se poate evita destul de simplu prin structura if-else,


dar în unele cazuri Switch-Case este mai practică şi mai bine vizibilă.
De exemplu, în structura if-else, la fiecare verificare trebuie să puneţi
variabile în expresia condiţionată, pe când la structura Switch-Case
acest lucru nu este necesar. La Switch-Case, pe de altă parte, nu
puteţi schimba variabilă, ci doar expresiile. În plus, Switch-Case, deşi
uşor lizibilă, nu este tocmai adecvată pentru blocuri condiţionate mari.
De obicei, se pun în ea acţiuni condiţionate scurte sau funcţii.

Să vedem aplicarea comenzii Switch în exemplul de mai sus:

int x = 5;
switch(x)
{
case 1:
System.out.println("x este unu");
break;
case 2:
System.out.println("x este doi");
break;
case 3:
System.out.println("x este trei");
break;
default:
System.out.println("x nu este nici unu, nici doi, nici
trei");

© Copyright Link group 2 / 13


Curs: Core Java Programming
Modul: Controlul fluxului
Unitate: Structura switch

În acest exemplu, întâi am iniţializat variabila x, iar apoi am pus-o în


structura Switch. Structura Switch subînţelege blocuri de condiţii,
mărginite obligatoriu cu paranteze acolade. Fiecare condiţie începe cu
cuvântul cheie Case, urmat de valoarea condiţionată sau de condiţie şi
de două puncte care indică începutul blocului. Puteţi, dar nu neapărat,
să puneţi acest bloc între paranteze acolade. Spre deosebire de
blocurile condiţionate standard, în cazul blocului Case, se va executa
întregul bloc condiţionat (şi nu doar primul rând). Mai mult, dacă
condiţia se îndeplineşte la un moment dat (într-un caz), se vor executa
toate liniile care urmează, până ce programul primeşte directiva să
părăsească întreaga structură sau până când structura se termină.

int a=1;
switch(a)
{
case 1:
System.out.println("a este unu");
case 2:
System.out.println("a este doi");
default:
System.out.println("a nu este nici unu, nici doi");
}

În Java, acest cod va face toate cele trei verificări ca rezultat, tocmai
pentru că nu există niciunde ieşirea din structură. Aceasta înseamnă
că partea subînţeleasă a oricărui bloc Case este comanda Break
(părăsirea necondiţionată a structurii).

Java nu permite procesarea tipurilor mai complexe în structura


Switch-Case, ci doar a valorilor de tip numere întregi şi caractere.

Codul următor va produce o eroare:

String a="myValue";
switch(a)
{

© Copyright Link group 3 / 13


Curs: Core Java Programming
Modul: Controlul fluxului
Unitate: Structura switch

case "myValue":
System.out.println("a este unu");
break;
}

Există posibilitatea activării unei expresii pentru mai multe condiţii


îndeplinite. De exemplu, dacă dorim ca o expresie să se execute dacă
valoarea este 1, 2 sau 3, şi o altă expresie să se execute dacă
valoarea este un alt număr, putem scrie:

int x = 4;
switch(x)
{
case 1:
System.out.println("x este unu, doi sau trei");
break;
case 2:
System.out.println("x este unu, doi sau trei");
break;
case 3:
System.out.println("x este unu, doi sau trei");
break;
default:
System.out.println("x nu este nici unu, nici doi, nici
trei");
break;
}

Aceasta ar fi un cod complet regulat, dar există posibilitatea să putem


scrie acelaşi cod şi mult mai simplu şi mult mai uşor vizibil:

int x = 4;
switch(x)
{
case 1:
case 2:
case 3:
System.out.println("x este unu, doi sau trei");

© Copyright Link group 4 / 13


Curs: Core Java Programming
Modul: Controlul fluxului
Unitate: Structura switch

break;
default:
System.out.println("x nu este nici unu, nici doi, nici
trei");
break;
}

Exerciţiu 1

Problemă:

În aplicaţie, intră datele următoare:

//datele de intrare
int vehicleCode = 1;
int speed = 30;
String[] vehicle = { "camion","autobuz","automobil" };

Trebuie să creăm o ieşire de program, care va verifica dacă vehiculul


de intrare este automobil. Şi, în caz că nu este, să verifice dacă viteza
vehiculului este 10, 20 sau 30. Dacă viteza vehiculului este una din
cele trei, trebuie să se scrie mesajul despre viteză. În caz contrar,
trebuie să se scrie mesajul că viteza nu este niciuna dintre cele trei
menţionate. De asemenea, în mesaj trebuie accentuat despre care tip
de vehicul este vorba.

Rezolvare 1:

//datele de intrare
int vehicleCode = 1;
int speed = 30;
String[] vehicle = { "camion","autobuz","automobil" };

if(vehicle[vehicleCode]!="automobil")
{
switch(speed)

© Copyright Link group 5 / 13


Curs: Core Java Programming
Modul: Controlul fluxului
Unitate: Structura switch

{
case 10:
System.out.println("Viteza vehiculului este " +
vehicul[vehicleCode] + " este 10");
break;
case 20:
System.out.println("Viteza vehiculului este " +
vehicul[vehicleCode] + " este 20");
break;
case 30:
System.out.println("Viteza vehiculului este " +
vehicul[vehicleCode] + " este 30");
break;
default:
System.out.println("Viteza vehiculului este " +
vehicul[vehicleCode] + " nu este nici 10, nici 20 nici
30");
}
}

Rezolvare 2:

1. //datele de intrare
int vehicleCode = 1;
int speed = 31;
String[] vehicle = { "camion","autobuz","automobil" };
if(vehicle[vehicleCode]!="automobil")
{
switch(speed)
{
case 10:
case 20:
case 30:
System.out.println("Viteza vehiculului este " +
vehicul[vehicleCode] + " este " + speed);
break;

© Copyright Link group 6 / 13


Curs: Core Java Programming
Modul: Controlul fluxului
Unitate: Structura switch

default:
System.out.println("Viteza vehiculului este " +
vehicul[vehicleCode] + " nu este nici 10, nici 20 nici
30");
}
}

Exerciţiu 2

Problemă:

În program intră următoarele date:

//datele de intrare
int x = 523134;
int y = 325423;

Trebuie să verificăm restul împărţirii dintre x şi y. Dacă nu există rest,


să se afişeze mesajul că restul nu există. În caz contrar, să se verifice
dacă restul este mai mare sau mai mic decât o mie, şi să se afişeze
mesajul corespunzător.

Rezolvare:

//datele de intrare
int x = 523134;
int y = 325423;
int reminder = x%y;
switch(reminder)
{
case 0:
System.out.println("împ?r?ire f?r? rest");
break;
default:
if(reminder>1000)

© Copyright Link group 7 / 13


Curs: Core Java Programming
Modul: Controlul fluxului
Unitate: Structura switch

System.out.println("restul peste o mie");


else
System.out.println("restul sub o mie");
break;
}

© Copyright Link group 8 / 13


Curs: Core Java Programming
Modul: Controlul fluxului
Unitate: Structura switch

CJPro_09 - Core Java Programming


1. Dacă structura <i&gtswitch</i&gt nu se întrerupe explicit
prin comanda <i&gtbreak</i&gt:
a) se execută corpul întreg
b) nu se execută corpul întreg
c) se produce o eroare
2. Ce subînţelege cuvântul cheie default în structura
switch/case:
a) blocul subînţeles
b) blocul care nu se va executa niciodată
c) blocul care se va executa întotdeauna
d) cuvântul cheie <i>default</i> nu există în structura
switch/case
3. Sub care condiţii se va executa ultima linie a codului
următor, în structura switch/case?
   case 1:
   case 2:
   case 3:
   System.out.println("se execută");
a) dacă valoarea de intrare este 1, 2 sau 3
b) numai dacă valoarea de intrare este 3
c) numai dacă valoarea de intrare este 2
d) numai dacă valoarea de intrare este 1
4. Care dintre tipurile oferite pot fi verificate prin structura
switch/case?
a) tip număr întreg
b) tip zecimal
c) Obiect
d) Şir
5. Prin care cuvânt cheie se părăseşte structura switch/case?

© Copyright Link group 9 / 13


Curs: Core Java Programming
Modul: Controlul fluxului
Unitate: Structura switch

a) break
b) default
c) exit
d) end
6. Ce se va întâmpla după interpretarea următoarei structuri
switch/case?
   switch(stringMeu)
   {
      case "stringMeu":
         System.out.println(stringMeu);
         break;
      default:
         System.out.println("acest string nu este stringMeu");
         break;
   }
a) se va produce o eroare
b) Nu se va întâmpla nimic
c) se va emite mesajul "stringulMeu"
d) se va emite mesajul "acest string nu este stringulMeu"
7. Ce se va întâmpla după executarea următoarei structuri
switch/case?
  switch(`A`)
   {
      case 65:
         System.out.println("Litera este A");
         break;
      default:
         System.out.println("Litera nu este A");
         break;
   }
a) se va emite mesajul "Litera este A"
b) se va emite mesajul "Litera nu este A"
c) se va produce o eroare

© Copyright Link group 10 / 13


Curs: Core Java Programming
Modul: Controlul fluxului
Unitate: Structura switch

d) nu se va întâmpla nimic

© Copyright Link group 11 / 13


Curs: Core Java Programming
Modul: Controlul fluxului
Unitate: Structura switch

1. Dacă structura <i&gtswitch</i&gt nu se întrerupe explicit


prin comanda <i&gtbreak</i&gt:
a
2. Ce subînţelege cuvântul cheie default în structura
switch/case:
a
3. Sub care condiţii se va executa ultima linie a codului
următor, în structura switch/case?
   case 1:
   case 2:
   case 3:
   System.out.println("se execută");
a
4. Care dintre tipurile oferite pot fi verificate prin structura
switch/case?
a
5. Prin care cuvânt cheie se părăseşte structura switch/case?
a
6. Ce se va întâmpla după interpretarea următoarei structuri
switch/case?
   switch(stringMeu)
   {
      case "stringMeu":
         System.out.println(stringMeu);
         break;
      default:
         System.out.println("acest string nu este stringMeu");
         break;
   }
a
7. Ce se va întâmpla după executarea următoarei structuri
switch/case?
  switch(`A`)
   {

© Copyright Link group 12 / 13


Curs: Core Java Programming
Modul: Controlul fluxului
Unitate: Structura switch

      case 65:
         System.out.println("Litera este A");
         break;
      default:
         System.out.println("Litera nu este A");
         break;
   }
a

© Copyright Link group 13 / 13

S-ar putea să vă placă și