Оператор вибору switch. Вкладені оператори switch
Зміст
- 1. Яке призначення у програмах має оператор вибору switch?
- 2. Яка загальна форма оголошення оператора вибору switch?
- 3. Принцип роботи оператора switch
- 4. Приклад використання оператору вибору switch, в якому є блок default
- 5. Приклад використання оператора switch, в якому пропущені оператори break
- 6. Приклад використання оператора switch, в якому відсутній блок default
- 7. Вкладені інструкції switch. Приклад
- 8. Переваги оператора switch у порівнянні з оператором if
- 9. Недоліки оператора switch у порівнянні з оператором if
- Зв’язані теми
Пошук на інших ресурсах:
1. Яке призначення у програмах має оператор вибору switch?
Оператор вибору switch є подібний до оператора умовного переходу if–else. Він дозволяє організувати розгалуження процесу виконання в програмі. У деяких випадках використання оператора вибору switch дає більш компактний програмний код у порівняння з оператором умовного переходу if-else.
⇑
2. Яка загальна форма оператора вибору switch?
У C-орієнтованих мовах програмування, до яких належить і Java, оператор вибору switch має однакову загальну форму представлення:
switch (вираз) { case значення1: // оператори ... break; case значення2: // оператори ... break; ... case значенняN: // оператори ... break; default: // оператори, що виконуються за замовчуванням ... }
де
- вираз – керуючий вираз, який може мати один з цілочисельних типів: byte, int, short, char або зчислений тип. У нових версіях JDK вираз може мати тип String.
- значення1, значення2, … , значенняN – константні вирази (літеральні значення). Кожне значення має бути сумісним за типом з вказаним виразом.
Блок default може бути відсутній.
⇑
3. Принцип роботи оператора switch
Оператор вибору switch працює наступним чином. Значення виразу порівнюється з кожним зі значень (значення1, значення2, …, значенняN), що слідують після ключового слова case. Якщо знайдено співпадіння, тоді виконуються оператори, що слідують після цієї частини case. Якщо в жодному з варіантів після case співпадіння не знайдено, тоді виконуються оператори, що йдуть в блоці default. Якщо блок default відсутній (може бути відсутній), тоді нічого не відбувається і виконується наступний оператор, що слідує за оператором switch.
Оператор break необхідний для негайного виходу з оператора switch. Якщо виконується оператор break, тоді виконується наступний після switch оператор.
⇑
4. Приклад використання оператору вибору switch, в якому є блок default
За заданим значенням n = 1..7 вивести назву відповідного дня тижня. Врахувати можливі помилкові значення n.
// оператор вибору switch int n; String s; // ввід значення n n = 6; switch (n) { case 1: s = "Понеділок"; break; case 2: s = "Вівторок"; break; case 3: s = "Середа"; break; case 4: s = "Четвер"; break; case 5: s = "П'ятниця"; break; case 6: s = "Субота"; break; case 7: s = "Неділя"; break; default: s = "Неправильно введений день"; } System.out.println(s);
⇑
5. Приклад використання оператора switch, в якому пропущені оператори break
Як відомо, оператор break, може бути відсутній.
У даному прикладі за введеним значенням номера дня тижня n = 1..7 визначається вихідний цей день чи робочий.
// оператор вибору switch int n; String s; // ввід значення n n = 3; switch (n) { case 1: case 2: case 3: case 4: case 5: s = "Робочий день"; break; case 6: case 7: s = "Вихідний день"; break; default: s = "Неправильно введений день"; } System.out.println(s);
⇑
6. Приклад використання оператора switch, в якому відсутній блок default
Дано ціле число n = 1..3. За даним значенням змінної n визначити:
- довжину кола;
- площу круга;
- об’єм кулі.
// оператор вибору switch int n; double pi = 3.1415; double r; // ввід значень n, r // ... switch (n) { case 1: double d = 2*pi*r; System.out.println("Довжина кола = " + d); break; case 2: double s = pi*r*r; System.out.println("Площа круга = " + s); break; case 3: double v = 4.0/3.0 * pi*r*r*r; System.out.println("Об'єм кулі = " + v); break; }
⇑
7. Вкладені інструкції switch. Приклад
Інструкція switch може містити іншу, вкладену інструкцію switch. У кожному операторі switch визначається свій блок коду. Блоки коду є незалежними один від одного.
Приклад. У даному прикладі на основі номера року (year) та місяця (month) обчислюється кількість днів у місяці (змінна days). Задачу розв’язано з використанням вкладених операторів if та switch.
// обчислення кількості днів у місяці року int f; int year; int month; int days; // задані місяць та рік year = 2404; month = 2; switch(month) { case 4: case 6: case 9: case 11: days = 30; break; case 2: // місяць лютий f = 0; // вкладений оператор if if (year%400==0) f=1; else if (year%100==0) f=0; else if (year%4==0) f=1; // вкладений оператор switch switch (f) { case 0: days=28; break; default: days=29; } break; default: days = 31; } System.out.println("Days = " + days);
⇑
8. Переваги оператора switch у порівнянні з оператором if
У порівнянні з оператором if переваги оператора switch наступні:
- при виборі з великої групи значень оператор switch працює швидше ніж оператор if-else. Це зв’язано з тим, що в операторі switch константи усіх гілок case та вираз мають однаковий тип. Тому достатньо здійснити перевірку на рівніть. В операторі if-else компілятор наперед не знає типи результатів виразів у різних гілках порівняння, що потребує додаткових перетворень які займають час.
- у випадках коли виконується код для декількох операторів гілок case без вказання розділяючих їх операторів break.
⇑
9. Недоліки оператора switch у порівнянні з оператором if
Порівняно з оператором if, оператор switch має такі недоліки:
- в операторі switch, у кожній гілці виконується перевірка тільки на рівність (пошук на співпадіння в гілці case). В операторі if у кожній гілці можна обчислювати будь-який логічний вираз будь-якого типу;
- в операторі switch вираз, що порівнюється може бути тільки типу int, зчисленням enum або типу String (починаючи з версії JDK 7). Вираз не може бути типом з плаваючою комою. В операторі if порівнюваний вираз може бути будь-якого типу;
- у двох різних гілках case константи не можуть мати однакові значення. Однакові значення у гілках case допускаються, якщо ці гілки розміщуються на різних рівнях вкладення у випадку вкладених операторів switch.
⇑
Зв’язані теми
- Оператор умовного переходу if
- Конструкція if-else-if
- Операції. Операція присвоювання. Тернарна операція ? : . Пріоритет операцій
- C++. Оператор вибору switch