Оператор выбора 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