Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w pewnym sensie rozszerzenie instrukcji warunkowej IF. Ogólna składnia instrukcji SWITCH jest następująca:
switch ({wyrażenie wyboru}) { case {wartość wyboru}: {ciąg instrukcji dla danego wariantu} case {inna wartość wyboru}: {ciąg instrukcji dla danego wariantu} default: {ciąg instrukcji dla wariantu domyślnego} }
W instrukcji SWITCH – inaczej niż w instrukcji IF – nie określamy warunku, który musi być prawdziwy, aby ujęty w instrukcji kod się wykonał. Tutaj określamy {wyrażenie wyboru}, którego wartością jest liczba całkowita i definiujemy warianty, które mają się wykonać w zależności od tego, jaka jest wartość tego wyrażenia. Warianty oznaczamy słówkiem kluczowym case, za którym umieszczamy wartość dla której kod z tego wariantu ma być uruchomiony.
Dodatkowo, instrukcja SWITCH umożliwia określenie wariantu domyślnego, który to wariant oznaczamy słówkiem kluczowym default. Wariant ten wykonywany jest, jeśli dla danej wartości {wyrażenia wyboru} nie określono wariantu typu case.
W poniższym przykładzie implementujemy z użyciem instrukcji SWITCH funkcję, która określa parzystość liczy przekazanej jako parametr wywołania:
public void oddOrEven(int x) { switch (x % 2) { case 0: System.out.println(x + " jest liczbą parzystą"); break; case 1: System.out.println(x + " jest liczbą nieparzystą"); break; default: System.out.println("nieprzewidziana sytuacja"); } }
Co ważne, wariant jest tylko punktem początkowym i kod będzie się wykonywał przechodząc kaskadowo przez kolejne warianty, aż do końca instrukcji SWITCH, chyba że wykonanie to przerwiemy za pomocą instrukcji break, tak jak to robimy w powyższym przykładzie. Instrukcja SWITCH działa w ten sposób, że w pierwszej kolejności wyliczana jest wartość wyrażenia wyboru, a następnie wykonywany jest skok do wariantu oznaczonego tą wartością.
Operator % (tj. operator reszty z dzielenia) zaimplementowany w Javie może zwracać wartości ujemne, stąd wyrażenie x % 2 oprócz wartości 1 i 0 może zwrócić także wartość -1. Stanie się tak dla każdej ujemnej liczby nieparzystej. Powyższy program nie rozpozna prawidłowo takiej sytuacji i wyświetli komunikat „nieprzewidziana sytuacja”. Poprawmy go więc w następujący sposób:
public void oddOrEven(int x) { switch (x % 2) { case 0: System.out.println(x + " jest liczbą parzystą"); break; case -1: // dodano wariant dla wartości -1 case 1: System.out.println(x + " jest liczbą nieparzystą"); break; default: System.out.println("nieprzewidziana sytuacja"); } }
Wariant z wartością -1 nie zawiera żadnych instrukcji, ale ponieważ nie zawiera też instrukcji break, zatem wykonany będzie dla tej wartości kod z wariantu znajdującego się poniżej, tj. dla wariantu z wartością 1. W ten sposób uruchamiamy de facto ten sam kod dla wartości -1 i 1. Nasza funkcja jest już w pełni poprawna, tj. prawidłowo rozpoznaje także nieujemne liczby nieparzyste. Wariant oznaczony etykietą default nie zostanie już zatem nigdy uruchomiony, ale możemy go pozostawić na wszelki wypadek.