Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
А. Н. Васильев - Java. Объектно-ориентированное...doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
686.59 Кб
Скачать

Условная инструкция switch()

  • Утром деньги — вечером стулья. Вечером деньги — утром стулья.

    • А можно так: утром стулья — вечером деньги?

      • Можно! Но деньги вперед!

Из к/ф «Двенадцать стульев»

Обычно к услугам условной инструкции switch() прибегают в случае, когда при проверке условия альтернатив больше, чем две. Эту инструкцию еще называют инструкцией выбора. Синтаксис вызова инструкции switch() следующий:

switch(условие){ case значение_1:

//команды_1 brake;

case значение_2:

//команды_2 brake;

...

case значение_N:

//команды_N brake; default:

//команды

}

После ключевого слова switch в круглых скобках указывается переменная или выражение, значение которого проверяются (условие). Возможные значения, которые может принимать условие, перечисляются после ключевых слов case. Каждому значению соответствует свой блок case. Каждый блок case заканчи- вается инструкцией break. Последним блоком в инструкции switch() являет- ся блок команд, выполняемых по умолчанию. Блок выделяется инструкцией default(). Блок не является обязательным, и инструкцию break в конце этого блока размещать не нужно. Наконец, все блоки case и блок default, если он есть, заключаются в фигурные скобки. Именно эти фигурные скобки определяют тело инструкции switch().

Алгоритм выполнения инструкции switch() следующий. Сначала вычисляется выражение или значение переменной, указанной в качестве условия. Затем вы- численное значение последовательно сравнивается со значениями, указанными после инструкций case, пока не будет найдено совпадение или не встретится блок default (если блок default отсутствует, то пока не будет достигнут конец тела инструкции switch()). Если совпадение найдено, начинает выполняться программный код соответствующего блока case. Код выполняется до конца тела инструкции switch() или break(). Собственно, инструкции break в блоках case и нужны для того, чтобы остановить выполнение программного кода инструк-

ции switch(). В противном случае продолжали бы выполняться следующие бло- ки case.

Выражение, которое указывается в качестве проверяемого условия, может воз- вращать в качестве значения целое число или символ. Значения, указываемые после инструкций case(), должны быть литералами или константами. Пример использования инструкции switch приведен в листинге 2.4.

Листинг 2.4. Использование инструкции switch()

class UsingSwitch{

public static void main(String[] args){

char s='П';

System.out.print("Фамилия пользователя: ");

// Инструкция выбора:

switch(s){

case'И': System.out.println("Иванов"); break;

case'П': System.out.println("Петров"); break;

case'С': System.out.println("Сидоров"); break;

default:

System.out.println("Не определена");

}

System.out.println("Программа завершила работу!");

}

}

В методе main() класса UsingSwitch объявляется переменная s типа char. Значе- нием переменной является начальная буква фамилии пользователя. Рассматри- вается три варианта: буква И соответствует фамилии Иванов, буква П соответству- ет фамилии Петров и буква С соответствует фамилии Сидоров.

Командой System.out.print("Фамилия пользователя: ") выводится сообщение, при- чем переход на следующую строку не осуществляется — в этом главное отли- чие метода print() от метода println(). Далее с помощью инструкции switch() осуществляется перебор значений переменной s. Если совпадение найдено, выводится соответствующая фамилия. Если совпадение не найдено, командой System.out.println("Не определена") выводится сообщение Не определена. В конце выполнения программы выводится сообщение об окончании работы. Для значе- ния переменной s='П' результат выполнения программы будет иметь вид:

Фамилия пользователя: Петров Программа завершила работу!

Обращаем внимание, что, во-первых, значением переменной s может быть ки- риллическая буква, во-вторых, регистр буквы имеет значение — если переменной s присвоить значение 'п', результат выполнения программы будет следующим: Фамилия пользователя: Не определена

Программа завершила работу!

Чтобы фамилия определялась независимо от регистра буквы, рассмотренную программу нужно несколько видоизменить. Модифицированный ее вариант при- веден в листинге 2.5.

Листинг 2.5. Пустые блоки в инструкции switch

class UsingSwitch2{

public static void main(String[] args){

char s='п';

System.out.print("Фамилия пользователя: ");

// Инструкция вывода:

switch(s){

case'И':

case'и': System.out.println("Иванов"); break;

case'П':

case'п': System.out.println("Петров"); break;

case'С':

case'с': System.out.println("Сидоров"); break;

default:

System.out.println("Не определена");

}

System.out.println("Программа завершила работу!");

}

}

В данном случае использованы пустые блоки case. Пример:

case'П':

case'п':

...

В этом случае, если значение проверяемой переменной (в данном случае пере- менной s) совпадает с буквой 'П', выполняется код вплоть до первой инструк- ции break, то есть такой же код, как и для случая, когда переменная s имеет значение 'п'.