Instrukcja wyboru SWITCH

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.

0 0 votes
Daj ocenę