Instructiunea switch
Instructiunea switch transfera controlul uneia dintre mai multe instructiuni depinzand de valoarea unei expresii.
Sintaxa generala:
switch (<Expresie>){
default: <Instructiune0>
case <ExpresieConstanta1> : <Instructiune1>
case <ExpresieConstanta2> : <Instructiune2>
...
case <ExpresieConstantaN> : <InstructiuneN>
}
Ordinea in care apar clauzele case nu are importanta, iar clauza default poate fi scrisa oriunde. Tipul lui <expresie> trebuie sa fie char, byte, short sau int, in caz contrar, apare o eroare la compilare.
Corpul instructiunii SWITCH trebuie sa fie un bloc. Orice instructiune continuta de bloc poate fi etichetata de una sau mai multe etichete case si default. Aceste etichete se spune ca sunt asociate instructiunii SWITCH ca valori ale expresiilor constante din etichetele case.
In cadrul unei instructiuni switch, trebuiesc satisfacute urmatoarele cerinte pentru a nu avea erori la compilare:
Fiecare valoare a lui <ExpresieConstanta1>, <ExpresieConstanta2>, ... , <ExpresieConstantaN> trebuie sa fie asignabila cu tipul lui <Expresie>
Nu trebuie sa existe 2 expresii constante cu ACEEASI valoare
Cel mult o eticheta default poate fi asociata cu aceeasi instructiune switch
Cand este executata o instructiune switch, mai intai se evalueaza <Expresie>. Daca evaluarea lui <Expresie> se termina anormal, atunci toata instructiunea se termina anormal. Altfel, executia continua prin compararea valorii lui <Expresie> cu fiecare expresie case. Atunci:
Daca una dintre constantele case (adica <ExpresieConstantaK>, unde K=1,2,...,N) este egala cu valoarea lui <Expresie>, atunci se executa toate instructiunile dupa eticheta case pana la intalnirea primului break. Daca toate aceste instructiuni se executa normal, atunci intreaga instructiune switch se termina normal
Daca nu exista nici o eticheta care sa se potriveasca cu valoarea lui <Expresie> si exista o eticheta default, atunci se executa toate instructiunile dupa eticheta default pana la intalnirea primului break
Daca nu exista nici o eticheta case care sa se potriveasca cu valoarea lui <Expresie> si nu exista o eticheta default, atunci nu se executa NIMIC si instructiunea switch se termina normal
Exemplu de program cu instructiunea switch:
public class Switch{
static void f(int k){
switch (k) {
default:
System.out.println("Audi");
break;
case 1:
System.out.println("BMW");
break;
case 2:
case 3:
System.out.println("Mercedes");
break;
case 4:
case 5:
System.out.println("Ford");
}
}
public static void main(String[] args){
f(1);
f(2);
f(3);
f(4);
f(6);
}
}
La executie, acesta va afisa:
BMW
Mercedes
Mercedes
Ford
Audi
Se observa posibilitatea utilizarii mai multor expresii case asociate aceluiasi bloc de instructiuni. Este ESENTIALA si terminarea unui bloc cu ajutorul instructiunii BREAK.
Daca, de exemplu, nu ar fi existat primul break asociat cazului default, atunci rezultatul ar fi fost:
BMW
Mercedes
Mercedes
Ford
Audi
BMW
Cam atat pentru instructiunea switch, sper ca v-am facut sa intelegeti.