006 Java Switch Case

Switch и Case: оператор выбора — введение в Java 006 #

В этом уроке мы рассмотрим на примерах оператор выбора Switch и опции выбора Case.

Пример:

  • За пятёрку в четверти по математике папа обещал мне велосипед.
  • За четвёрку в четверти по математике мама купит мне GoPro4.
  • За тройку меня, наверное, не будут ругать.
  • За двойку меня отругают.
  • За единицу меня “убьют”.
Опять двойка

Опять двойка

Типичный жизненный пример, который можно написать на Java:

public class SwitchOne {
    public static void main(String[] args) {

        int оценкаВЧетверти = 1;
        String награда;

        switch (оценкаВЧетверти) {
            case 5:
                награда = "Велосипед";
                break;
            case 4:
                награда = "GoPro4";
                break;
            case 3:
                награда = "Награды не будет";
                break;
            case 2:
                награда = "Потерянный час времени и плохое настроение";
                break;
            case 1:
                награда = "Лучше не спрашивайте";
                break;
            default:
                награда = "Такой оценки не существует";
                break;
        }
        System.out.println(награда);
    }
}

Мы видим, что каждая оценка заканчивается брейком: если брейк не ставить, то выбор селектирует следующую награду. Удобно, если у нас одинаковый результат на несколько переменных. Заканчивается ввод данных дефолтным выбором, который выдаётся при получении непредусмотренных данных или, лучше сказать, всех остальных неуказанных.

При наличии множественных выборов удобно использовать Switch и Case. Направо пойдёшь коня потеряешь, прямо…. Это именно тот случай, где уже можно использовать такой алгоритм действий.

Первый же пример из поиска приведёт нас к календарю. Это наиболее используемый пример в учебниках. 12 месяцев с уникальным названием и ID:

public class SwitchDemoCalendar {
    public static void main(String[] args) {
        int month = 8;
        String monthString;
        switch (month) {
            case 1:  monthString = "January";
                     break;
            case 2:  monthString = "February";
                     break;
            case 3:  monthString = "March";
                     break;
            case 4:  monthString = "April";
                     break;
            case 5:  monthString = "May";
                     break;
            case 6:  monthString = "June";
                     break;
            case 7:  monthString = "July";
                     break;
            case 8:  monthString = "August";
                     break;
            case 9:  monthString = "September";
                     break;
            case 10: monthString = "October";
                     break;
            case 11: monthString = "November";
                     break;
            case 12: monthString = "December";
                     break;
            default: monthString = "Invalid month";
                     break;
        }
        System.out.println(monthString);
    }
}

В результате работы данной конструкции мы получаем переменную с нужным значением. В последнем случае “monthString”, или в случае с оценкой, “награда”. Абсолютно простая конструкция, где самое сложное — синтаксис, который просто надо выучить. И, после написания 30 различных примеров без шпаргалок, он в крови.

Для закрепления рассмотрим ещё один пример:

public class SwitchCoffee {
	public static void main(String[] args) {
		int a = 1; //номер кнопки в кофе-автомате
		switch (a) {
			case 1:
				System.out.println("Кофе американо готовится");
				break;
			case 2:
				System.out.println("Кипяток сейчас будет");
				break;
			case 3:
				System.out.println("Кофе эспрессо готовится");
				break;
			case 4:
				System.out.println("Какао уже в пути");
				break;
			case 5:
				System.out.println("Вода кипятится");
				System.out.println("Кофе мелется");
				System.out.println("Сливки добавляются");
				break;
			default:
				System.out.println("повторите свой выбор, напиток под номером: "
                 + a + " Временно недоступен");
                break;
		}
		System.out.println("Программа отработана без ошибок");
	}
}

Можно заметить, что в пятом кейсе последнего примера с кофе-автоматом запускается множество сообщений. Мы можем использовать один кейс для запуска нескольких директив. Но это не рекомендуется из-за плохой читаемости кода. Обычно Switch используется для изменения одной переменной. Но это не значит, что вы такого не встретите в чужом коде.

public class CoffeeMashine {
	public static void main(String[] args) {
		int choose = 2;
		myChoose(choose);
	}
	public static void myChoose(int choose) {
		switch (choose) {
			case 3:
				latte();
				break;
			case 2:
				americano();
				break;
			case 1:
				cappucino();
				break;
			default:
				americano();
		}
	}
	public static void latte() {
		System.out.println("---");
		System.out.println("We are created latte for you master");
		milk(40);
		coffee(30);
		water(70);
		System.out.println("---");
	}
	public static void cappucino() {
		System.out.println("---");
		System.out.println("We are created cappucino for you master");
		milk(30);
		coffee(40);
		water(20);
		System.out.println("---");
	}
	public static void americano() {
		System.out.println("---");
		System.out.println("We are created americano for you master");
		milk(0);
		coffee(40);
		water(10);
		System.out.println("---");
	}
	public static void water(int ml) {
		System.out.printf("Added %d ml of water \n", ml);
	}
	public static void milk(int ml) {
		System.out.printf("Added %d ml of milk \n", ml);
	}
	public static void coffee(int ml) {
		System.out.printf("Added %d ml of coffee \n", ml);
	}
}

Перед домашним заданием хочется привести ещё один пример применения Switch/Case в жизни: обычный лифт в многоэтажном здании. В зависимости от номера нажимаемой кнопки, лифт едет (ожидаемо) на нужный этаж. Оператор выбора Switch используется вокруг вас везде.

Лифт

Лифт

Дополнительные материалы #

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html

Домашнее задание #

  1. Напишите программу действий кассира магазина, если у него пытаются купить алкоголь следующие 5 покупателей: 10 лет, 17 лет, 18 лет, 20 лет и 30 лет.
  2. Напишите программу, которая определяет сезон года. Месяца указаны int переменными.