1. Оператор множественного выбора — switch

В Java есть еще один интересный оператор, доставшийся в наследство от бабушки (языка C++). Это оператор switch. Его еще называют оператором множественного выбора. Выглядит он немного громоздко:
switch(выражение)
{
case значение1: код1;
case значение2: код2;
case значение3: код3;
}
Внутри скобок указывается какое-нибудь выражение или переменная. Если значение выражений равно значение1, начинает выполняться код1, если равно значение2, начинает выполняться код2, если равно значение3 начинает выполняться код3.
Пример:
| Код | Вывод на экран |
|---|---|
|
|
2. Оператор break в switch
Важной особенностью работы switch является то, что программа просто перепрыгивает на нужную строку (на нужный блок кода) и затем выполняет все блоки кода до конца switch. Не только тот блок кода, который соответствует значению внутри switch, а все блоки кода до конца switch.
Пример:
| Код | Вывод на экран |
|---|---|
|
|
При значении температуры 36, программа перейдет внутри switch на первый блок кода — первую строку, и после ее выполнения просто будут выполняться остальные блоки кода.
Если вы хотите, чтобы в каждом случае выполнялся только один блок кода, на который перепрыгнуло выполнение программы, вам после этого блока кода нужно написать оператор break;
Пример:
| Код | Вывод на экран |
|---|---|
|
|
У последнего варианта в switch можно break не писать, все равно блок кода там последний.
3. Действие по умолчанию: default
Еще важный момент. А что будет происходить, если ни одно из предложенных значений внутри switch не совпало со значением выражения внутри круглых скобок?
Если подходящий вариант не найдется, работа оператора switch завершится, и программа продолжит выполнять тот код, который написан после фигурных скобок оператора switch.
Однако в switch есть возможность сделать поведение, аналогичное ветке else из if-else. Для этого нужно использовать ключевое слово default.
Если ни один case вариант внутри switch не совпал со значением выражения и в switch объявлен default, будет выполнен его код. Пример:
| Код | Вывод на экран |
|---|---|
|
|
4. Сравнение switch vs if-else
Оператор switch чем-то похож на оператор if-else, только он его более сложный вариант.
Вы всегда можете переписать код switch в виде нескольких if-ов. Пример:
| Код со switch | Код с if-else |
|---|---|
|
|
Код слева будет работать точно так же, как и код справа.
Цепочку в виде нескольких if-else лучше использовать, когда внутри условия if различные сложные выражения в каждом отдельном случае.
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;
}
Примечание. Если вы используете enum внутри switch, можно не писать имя класса перед каждым значением в case. Достаточно просто написать значение.