switch, яка здійснити вибір з багатьох варіантів. Щоправда вона дещо незграбна і деякі програмісти вважають за краще уникати її використання.
Наприклад, якщо Ви організовуєте певне меню і пропонуєте користувачу вибрати, номер конкретного пункту, то можна використати наступний код:
Scanner in = new Scanner(System.in);
System.out.print("Select an option (1, 2, 3, 4) ");
int choice = in.nextInt();
switch (choice) {
case 1:
. . .
break;
case 2:
. . .
break;
case 3:
. . .
break;
case 4:
. . .
break;
default:
// bad input
. . .
break;
}
Якщо пропустити інструкцію break, то всі інші інструкції будуть також виконані. Тобто якщо справдиться умова першого варіанту, то будуть здійснені ще й дії вказані для виконання у всіх інших варіантах до наступної інструкції break.
int k=1;
switch (k) {
case 1:
System.out.print(1);
case 2:
System.out.print(2);
case 3:
System.out.print(3);
break;
case 4:
System.out.print(4);
break;
default:
// викинути виняток (виведе помилку при виконанні програми)
throw new IllegalStateException("Unexpected value: " + k);
}
Як результат буде виведено: 123
До версії Java 7, яка вийшла у 2011 році, case мітка мала бути лише цілим числом або нумерованою константою. Починаючи із Java 7 можна перевіряти таким чином на рівність також рядки:
String input = . . .;
switch (input)
{
case "A":
. . .
break;
. . .
}
В Java 12 з'явилася можливість повертати значення з інструкції switch за допомогою ключового слова break, проте в Java 13 для цього ввели додаткове слово yield, а використовувати для цього break заборонили.
int result = switch (mode) {
case "A":
yield 1;
case "B":
yield 2;
. . .
В Java 12 також для switch з'явився синтаксис подібний до лямбда виразів з підтримкою повернення значення із switch:
String str="A";
var result = switch (str) {
case "A" -> 1;
case "B" -> 2;
case "C" -> 3;
case "D" -> 4;
default -> throw new IllegalStateException("Unexpected value: " + str);
};
System.out.println(result); //result=1
Аналогічний результат можна отримати так:
String str="A";
int result;
switch (str) {
case "A" -> result=1;
case "B" -> result=2;
case "C" -> result=3;
default -> throw new IllegalStateException("Unexpected value: " + str);
};
System.out.println("result="+result);
Запримітьте, що інструкція break вже не потрібна. Якщо потрібно, щоб виконалось декілька випадків, то використовуємо кому між значеннями case (раніше для цього спеціально пропускалась інструкція break):
String str="A";
var result = switch (str) {
case "A","B","C" -> 1;
case "D" -> 4;
default -> throw new IllegalStateException("Unexpected value: " + str);
};
System.out.println(result); //result=1
Якщо потрібно виконати певні інструкції в блоці, то для повернення результату використовується інструкція yield (починаючи з Java 13):
String str="C";
var result = switch (str) {
case "A" -> 1;
case "B" -> 2;
case "C" -> {
System.out.println("3!");
yield 3; // return 3
}
default -> throw new IllegalStateException("Unexpected value: " + str);
};
System.out.println("result="+result); //result=3
Замість цифри, при поверненні, може використовуватися змінна або вираз.
int x=2;
int y=3;
String str="C";
var result = switch (str) {
case "A" -> x+y;
. . .
Немає коментарів:
Дописати коментар