Switch

Instrucţiunea switch va verifica o variabilă cu o serie de valori. Atunci când întâlneşte o valoare egală, va executa toate instrucţiunile până la întâlnirea unui break. În cazul în care nicio valoare nu este egală, va executa instrucţiunile din clauza default. Exemplul de mai jos este echivalent cu exemplul de la if-else.

Exemplu 1

int weekday = 5;
String result = "";
switch (weekday) {
    case 1:
        result = "Sunday";
        break;
    case 2:
        result = "Monday";
        break;
    case 3:
        result = "Tuesday";
        break;
    default:
        result = "Other day";
}

Exemplu 2

int month = 5;
int daysInMonth = 0;
switch (month) {
    case 1: // Ianuarie
    case 3: // Martie
    case 5: // Mai
    case 7: // Iulie
    case 8: // August
    case 10: // Octombrie
    case 12: // Decembrie
        daysInMonth = 31;
        break;
    case 4: // Aprilie
    case 6: // Iunie
    case 9: // Septembrie
    case 11: // Noiembrie
        daysInMonth = 30;
        break;
    case 2: // Februarie
        daysInMonth = 28;
        break;
}

Exemplu 3

switch (number) { // un oarecare numar intreg
    case 0:
        System.out.println("This is my first message!");
    case 2:
        System.out.println("This is my second message!");
    case 15:
        System.out.println("This is my 3333333 message!!!!");
        break;
    case 13:
        System.out.println("4444444444444444");
    case 4:
        System.out.println("No more messages after this 5th one!");
        break;
    case 3:
        System.out.println("And one default, please!");
    case 8:
        System.out.println("A default that will come after this");
    default:
        System.out.println("a message by default...");
        break;
}

Exemplu String

Maria a obținut nota 10, Anca 9, iar restul 7. Dar îl avem și pe domnul profesor. Ce facem ca să afișăm nota?

if ( nume.equals("Maria") ) {  
	System.out.println ("Nota 10"); 
} else if ( nume.equals("Anca") ) {  
	System.out.println ("Nota 9"); 
} else if ( nume.equals("profesor") ) {  
	// nu scriem nimic aici
} else {
	System.out.println ("Nota 7");
}

Până la Java 7, String nu era potrivit pentru a fi folosit într-un switch şi trebuia folosit numărul elevului din catalog:

switch (nume) {
	case (16): syso ("Nota 10");
	break;
	case (15): syso ("Nota 9");
	break;
	case (-1):  //Nu scriem nimic aici.
	break;
	default: syso ("Nota 7");
}

Sau:

if ( !nume.equals("Maria")   &&  !nume.equals("Anca")  &&  !nume.equals("profesor") ) {
	syso("Nota 7");
}   
//adică dacă numele nu e nici Maria, nici Anca și nici profesor
//inlocuiti ghilimelele cu ghilimelele de la Eclipse

//se poate si cu paranteze
if ( (!nume.equals("Maria") )  &&  (!nume.equals("Anca"))  &&  (!nume.equls("profesor")) ) ....
if ( (x!=16)   &&  (x!=15)  &&  (x!=-1) ) ......

Observaţie

Varabila folosită la switch poate fi doar byte, short, char, int sau String. Poate funcţiona şi cu enumeraţii (enum) sau clase wrapper pentru tipurile de date primitive menţionate (Character, Byte, Short, Integer). Valorile folosite la clauzele case nu se pot repeta.

Assignment

Refaceţi exerciţiile de pe pagina if folosind un switch.

Exerciţii

1. Să se realizeze un program în care utilizatorul introduce de la tastatură un număr între 0 și 6 reprezentând ziua din săptămână, astfel: 0 = Duminică, 1 = Luni … 6 = Sâmbătă. Folosind switch-ul să se afișeze un mesaj specific zilei din săptămână.

Solutie

Solutie


Scanner keyboard = new Scanner(System.in);
System.out.println("Alegeti o zi (introduceti numarul)");
System.out.print("0. Duminica " + "\n"
               + "1. Luni" + "\n"
               + "2. Marti" + "\n"
               + "3. Miercuri" + "\n"
               + "4. Joi" + "\n"
               + "5. Vineri" + "\n"
               + "6. Sambata" + "\n"
               );
int alegere = keyboard.nextInt();

switch(alegere) {

   case 0: System.out.println("Azi e zi libera");
           break;
   
   case 1: System.out.println("Azi e prima zi de munca");
           break;
   
   case 2: System.out.println("Azi sunt trei ceasuri rele. Not!");
           break;
   
   case 3: System.out.println("Azi e mijlocul saptamanii");
           break;
   
   case 4: System.out.println("Incepe sa se simta adierea vacantei");
           break;
   
   case 5: System.out.println("Ultima zi de munca. Ura!");
           break;
   
   case 6: System.out.println("Sambata!!!");
           break;

   default: System.out.println("N-ai ales o zi a saptamanii!");
}


2. Refaceţi acelaşi exerciţiu cu String în loc de int.

You could leave a comment if you were logged in.