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
. Достаточно просто написать значение.
потокомпутём) потом вспомнишь мой комент;)