Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Оператор множественного выбора






Инструкция множественного выбора switch позволяет выполнять различные части программы в зависимости от того, какое значение будет иметь некоторая целочисленная переменной (её называют «переменной-переключателем», а «switch» с английского переводится как раз как «переключатель»).

Схема инструкции такова:

switch (переключатель) {
case значение1:
инструкция1;
break;
case значение2:
инструкция2;
break;

default:
инструкция_по_умолчанию;
}

Рассмотрим все элементы оператора:

  • переключатель — это целочисленная переменная или выражение дающее целочисленный результат;
  • значение1, значение2, … — это целочисленные литералы, с которыми будет сравниваться значение переключателя. Если переключатель равен значениюN, то программа будет выполняться со строки, следующей за case значениеN: и до ближайшего встреченного break, либо до конца блока switch (если break не встретится);
  • default: — это метка инструкции после которой будут выполняться в том случае, если выше ни одно из значенийN не совпало с переключателем. Метка default — необязательная: можно её не включать в блок switch меток или не выполнять после неё никаких команд;
  • инструкцияN — простая или составная инструкция. Притом в случае составной несколько команд не обязательно объединять в блок, можно их просто написать друг за другом разделяя с помощью «;» (и начиная новые строки для удобства).

Рассмотрим такую ситуацию: в какой-то момент требуется просить у пользователя, надо ли продолжать программу или можно её завершить. Предположим, что ответ пользователя принимается в виде символа, вводимого с клавиатуры и сохраняемого в переменной ans: Д — да, продолжать, Н — нет, остановить.

Тогда получаем примерно такой программный код:

switch(ans) {
case 'Д':
System.out.println(" Продолжаем программу");
break;
case 'Н':
System.out.println(" Останавливаем программу");
break;
}

Если мы захотим как-то оповестить пользователя о том, что он ввёл неподходящий символ, то пригодится метка default:

switch(ans) {
case 'Д':
System.out.println(" Продолжаем программу");
break;
case 'Н':
System.out.println(" Останавливаем программу");
break;
default:
System.out.println(" Вы ввели неподходящий символ");
}

После инструкций причастных к этой метке break обычно не ставят, потому что default располагается в конце всего блока switch и после неё всё равно завершится оператор множественного выбора. Но в остальных ветках — break необходим. Рассмотрим пример, в котором по ошибке пропущен первый break в ситуации, когда в переменной-переключателе будет находится символ «Д»:

char ans = 'Д';
switch(ans) {
case 'Д':
System.out.println(" Продолжаем программу");
case 'Н':
System.out.println(" Останавливаем программу");
break;
default:
System.out.println(" Вы ввели неподходящий символ");
}

На экран будут выведены сразу две фразы: «Продолжаем программу» и «Останавливаем программу». Это случилось потому, что после первой ветки с литералом «Д» программа выполнялась до первого встреченного break, т.е. выполнилась и часть, относящаяся к ветке с литералом «Н».

Такое поведение программы можно использовать во благо. Например, можно разместить несколько подряд идущих меток с разными литералами, для которых будет выполняться один и тот же код:

switch(ans) {
case 'Д':
case 'д':
case 'Y':
case 'y':
System.out.println(" Продолжаем программу");
case 'Н':
case 'н':
case 'N':
case 'n':
System.out.println(" Останавливаем программу");
break;
default:
System.out.println(" Вы ввели неподходящий символ");
}

Теперь пользователь для продолжения программы сможет ввести не только символ «Д», но и символы «д», «Y», «y» (от английского «yes»).

Любой оператор switch можно заменить конструкцией if…else:

if (ans=='Д' || ans=='д' || ans=='Y' || ans=='y') {
System.out.println(" Продолжаем программу");
} else if (ans=='Н' || ans=='н' || ans=='N' || ans=='n') {
System.out.println(" Останавливаем программу");
} else {
System.out.println(" Вы ввели неподходящий символ");
}

Обратное — неверно, ведь switch позволяет только сравнивать переключатель с конкретными значениями, но не позволяет для какой-то из веток задать условие в виде целого диапазона значений с использованием операторов сравнения (например, с использованием строгих неравенств и логических операторов «и» или «или»). Также напомним, что в качестве переключателя могут выступать только целочисленные переменные или выражения.

if…else более универсальный оператор, чем switch.

Задачи

1. Создать программу, которая будет проверять попало ли случайно выбранное из отрезка [5; 155] целое число в интервал (25; 100) и сообщать результат на экран.

Примеры работы программы:

Число 113 не содержится в интервале (25, 100)

Число 72 содержится в интервале (25, 100)

Число 25 не содержится в интервале (25, 100)

Число 155 не содержится в интервале (25, 100)

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

Примеры работы программы:

В числе 208 наибольшая цифра 8

В числе 774 наибольшая цифра 7

В числе 613 наибольшая цифра 6

3. В три переменные a, b и c явно записаны программистом три целых попарно неравных между собой числа. Создать программу, которая переставит числа в переменных таким образом, чтобы при выводе на экран последовательность a, b и c оказалась строго возрастающей.

Числа в переменных a, b и c: 3, 9, -1
Возрастающая последовательность: -1, 3, 9

Числа в переменных a, b и c: 2, 4, 3
Возрастающая последовательность: 2, 3, 4

Числа в переменных a, b и c: 7, 0, -5
Возрастающая последовательность: -5, 0, 7

4. На некотором предприятии инженер Петров создал устройство, на табло которого показывается количество секунд, оставшихся до конца рабочего дня. Когда рабочий день начинается ровно в 9 часов утра — табло отображает «28800» (т.е. остаётся 8 часов), когда времени 14: 30 — на табло «9000» (т.е. остаётся два с половиной часа), а когда наступает 17 часов — на табло отображается «0» (т.е. рабочий день закончился).

Программист Иванов заметил, как страдают офисные сотрудницы — им неудобно оценивать остаток рабочего дня в секундах. Иванов вызвался помочь сотрудницам и написать программу, которая вместо секунд будет выводить на табло понятные фразы с информацией о том, сколько полных часов осталось до конца рабочего дня. Например: «осталось 7 часов», «осталось 4 часа», «остался 1 час», «осталось менее часа».

Итак, в переменную n должно записываться случайное (на время тестирования программы) целое число из [0; 28800], далее оно должно выводиться на экран (для Петрова) и на следующей строке (для сотрудниц) должна выводиться фраза о количестве полных часов, содержащихся в n секундах.

Примеры работы программы:

23466
Осталось 6 часов

10644
Осталось 2 часа

5891
Остался 1 час

1249
Осталось менее часа

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.