1. Оператор множинного вибору switch

Оператор множинного вибору switch

У Java є ще один цікавий оператор, який дістався у спадок від бабусі (мови C++) — це оператор switch. Його ще називають оператором множинного вибору. Він має дещо громіздкий вигляд:

switch(вираз)
{
   case значення1: код1;
   case значення2: код2;
   case значення3: код3;
}

У дужках вказується який-небудь вираз або змінна. Якщо значення виразу дорівнює значення1, виконується код1, якщо дорівнює значення2, виконується код2, якщо дорівнює значення3, виконується код3.

Приклад:

Код Виведення на екран
int temperature = 38;

switch(temperature)
{
   case 36: System.out.println("Низька");
   case 37: System.out.println("Нормальна");
   case 38: System.out.println("Висока");
}
Висока

2. Оператор break в операторі switch

Важливою особливістю роботи switch є те, що програма просто перестрибує на потрібний рядок (на потрібний блок коду) і потім виконує всі блоки коду до кінця оператора switch. Не тільки той блок коду, який відповідає значенню, переданому у switch, а всі блоки коду до кінця оператора switch.

Приклад:

Код Виведення на екран
int temperature = 36;

switch(temperature)
{
   case 36: System.out.println("Низька");
   case 37: System.out.println("Нормальна");
   case 38: System.out.println("Висока");
}
Низька
Нормальна
Висока

Коли температура дорівнює 36, програма перейде всередині оператора switch на перший блок коду — перший рядок, і після його виконання буде виконано всі наступні блоки коду.

Якщо ви хочете, щоб у кожному випадку виконувався тільки той блок коду, на який перестрибнула програма, потрібно після цього блоку коду вставити оператор break.

Приклад:

Код Виведення на екран
int temperature = 36;

switch(temperature)
{
   case 36:
      System.out.println("Низька");
      break;
   case 37:
      System.out.println("Нормальна");
      break;
   case 38:
      System.out.println("Висока");
}
Низька

Після останнього варіанта в операторі switch можна break не вставляти — усе одно це останній блок коду.


3. Дія за замовчуванням: default

Ще один важливий момент. А що станеться, якщо значення виразу в круглих дужках не збігається з жодним значенням, передбаченим у switch?

Якщо відповідного варіанту не буде знайдено, робота оператора switch завершиться, і програма перейде до виконання коду після фігурної дужки, що закриває оператор switch.

Проте можна налаштувати switch на поведінку, аналогічну гілці else в операторі if-else. Для цього потрібно скористатися ключовим словом default.

Якщо жоден варіант case в операторі switch не збігається зі значенням виразу, то за наявності у switch варіанту default буде виконано цей код. Приклад:

Код Виведення на екран
int temperature = 40;
switch(temperature)
{
   case 36:
      System.out.println("Низька");
      break;
   case 37:
      System.out.println("Нормальна");
      break;
   case 38:
      System.out.println("Висока");
      break;
   default:
      System.out.println("Викликайте швидку допомогу");
}
Викликайте швидку допомогу

4. Порівняння switch та if-else

Оператор switch дещо схожий на оператор if-else, тільки трохи складніший.

Ви завжди можете переписати код з оператором switch на код із декількох if-ів Приклад:

Код з оператором switch Код з оператором if-else
int temperature = 40;
switch(temperature)
{
   case 36:
      System.out.println("Низька");
      break;
   case 37:
      System.out.println("Нормальна");
      break;
   case 38:
      System.out.println("Висока");
      break;
   default:
      System.out.println("Викликайте швидку допомогу");
}
int temperature = 40;

if (temperature == 36)
{
   System.out.println("Низька");
}
else if (temperature == 37)
{
   System.out.println("Нормальна");
}
else if (temperature == 38)
{
   System.out.println("Висока");
}
else
{
   System.out.println("Викликайте швидку допомогу");
}

Код ліворуч працюватиме так само, як і код праворуч.

Ланцюжок із декількох if-else краще використовувати тоді, коли всередині умови if для кожного окремого випадку є різні складні вирази.


20
Задача
Java Syntax Zero,  20 рівень3 лекція
Недоступна
Рахуємо клітини
Перед тобою поле 10x10, в якому у випадковому порядку розміщено клітини зеленого кольору, а в них — числа. Щоб побачити це, можеш запустити програму. Твоє завдання — реалізувати метод showResult(), який має зробити таке: Обчислити суму всіх чисел у зелених клітинах і вивести в консоль: Сума всіх чи
20
Задача
Java Syntax Zero,  20 рівень3 лекція
Недоступна
Кольори веселки
Попрацюймо з методом setCellColor(int, int, Color), який зафарбовуватиме клітину за переданими координатами. Розпочнімо малювати веселку. Потрібно створити ігрове поле розміром 10x7 у методі initialize() і зафарбувати кожен рядок у свій колір за допомогою методу setCellColor(int, int, Color). Порядо

5. Які типи даних можна використовувати як параметр оператора switch?

Не всі типи даних підходять для використання у варіантах case оператора switch. Наразі можна використовувати літерали таких типів:

  • цілі типи: byte, short, int
  • тип char
  • тип String
  • значення будь-якого enum-типу

Інші типи даних використовувати як значення case не можна.

Приклад використання enum в операторі switch:

Day day = Day.MONDAY;
switch (day)
{
   case MONDAY:
      System.out.println("Понеділок");
      break;
   case TUESDAY:
      System.out.println("Вівторок");
      break;
   case WEDNESDAY:
      System.out.println("Середа");
      break;
   case THURSDAY:
      System.out.println("Четвер");
      break;
   case FRIDAY:
      System.out.println("П'ятниця");
      break;
   case SATURDAY:
      System.out.println("Субота");
      break;
   case SUNDAY:
      System.out.println("Неділя");
      break;
}

Примітка. Якщо в операторі switch використовується перелік enum, у case можна не писати ім'я класу перед кожним значенням. Досить просто вказати значення.


20
Задача
Java Syntax Zero,  20 рівень3 лекція
Недоступна
Діалогові вікна
Реалізуймо відображення діалогового вікна з текстом. У разі натискання лівої кнопки миші виводимо текст "Ви виграли" зеленого кольору, а в разі натискання правої кнопки миші — "Ви програли" червоного кольору. Для того щоб працювати з натисканням кнопок миші, потрібно перевизначити методи onMouseLef