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; . . .
Немає коментарів:
Дописати коментар