Блок 1. Раздел 2. Тема 6

Оператор switch-case

Слова switch-case переводятся с английского как "переключать по случаям". Пусть у нас есть переменная. В случае, если она равна 1, то сделать одно. Если она равна 29, то сделать другое. А во всех остальных случаях делать третье. Так устроен switch-case.
Сразу посмотрим работу со switch-case в коде. Перепишем старую программу-лотерею. Раньше мы делали её через if-else, и это было нормально. Можно сделать её же через switch-case, и это тоже будет нормально, но немного короче. Привыкайте, что в Java одно и то же можно написать несколькими разными средствами.
        Scanner myscan = new Scanner (System.in);
//      Икс приобретает значение функции nextInt ()
//	nextInt возвращает число, введенное с клавиатуры        
        int x = myscan.nextInt ();
        switch (x) {
            case 4:
                System.out.println ("Вы ВЫИГРАЛИ ГЛАВНЫЙ ПРИЗ!");
                System.out.println ("Это миллион долларов!");
                break;
            case 10:
                System.out.println ("Вы выиграли 100 рублей!..");
                break;    
            case 40:
                System.out.println ("Вы выиграли 10 рублей!..");
                break;    
            case 89:
                System.out.println ("Вы выиграли 1000 рублей!..");
                break;    
            default:
                System.out.println ("Попробуйте ещё в следующий раз!");
                break;    
           }
Общий вид оператора switch-case:
switch (переменная или выражение для сравнения) {
	case Совпадение1: 
	    	код программы;
		break;
	case Совпадение 2: 
	    	код программы;
		break;
	case Совпадение 3: 
	   	код программы;
		break;
	default:  // поведение во всех остальных случаях
	    	код программы;
	    	break;
}
Как видно, секция default исполнится, если переменная не равна ни одному из условий во всех случаях case. Случаев можно сделать сколько угодно. Особенно удобен switch-case, когда вам нужно разобрать много сложных случаев. Оператор break внутри каждого case обозначает конец этого блока case и выход из всего switch. Оператор break нам ещё встретится в циклах и тоже будет означать конец всего цикла.
Самое главное мы уже освоили. Теперь время решать задачи.
Задача 1. Как будет работать и что будет выдавать данная программа на экране? По сравнению с кодом в материале выше, здесь допущена ошибка - убрано одно слово.
package javaapplication157;

import java.util.Scanner;

public class JavaApplication157 {

    public static void main(String[] args) {
        
        Scanner myscan = new Scanner (System.in);
//      Икс приобретает значение функции nextInt ()
//	nextInt возвращает число, введенное с клавиатуры        
        int x = myscan.nextInt ();
        switch (x) {
            case 4:
                System.out.println ("Вы ВЫИГРАЛИ ГЛАВНЫЙ ПРИЗ!");
                System.out.println ("Это миллион долларов!");
               
            case 10:
                System.out.println ("Вы выиграли 100 рублей!..");
                break;    
            case 40:
                System.out.println ("Вы выиграли 10 рублей!..");
                break;    
            case 89:
                System.out.println ("Вы выиграли 1000 рублей!..");
                break;    
            default:
                System.out.println ("Попробуйте ещё в следующий раз!");
                break;    
           }
     }
}
Решение
Пропущен break в первом case. Код скомпилируется и заработает, но будет ошибка времени выполнения. В случае x равного 4 программа выдаст пользователю сразу два приза - сначала на миллион долларов, а потом ещё 100 рублей в придачу. Первый case начинает исполнятся, не встречает break и программа идёт далее до ближайшего break, а он только в конце второго case.

Наверное, в реальном приложении, поскольку система из-за случайной ошибки программиста сработала некорректно, казино предложило бы бесплатно сыграть заново, обнулив полученный результат.. :)
Решайте больше задач по этому разделу здесь.
Подведём итоги раздела 2 и перейдём к следующему