Пятница, 29.03.2024, 03:08
Приветствую Вас Гость | RSS

Лекции

Меню сайта
Форма входа
Категории раздела
ТАУ (Теория автоматического управления) [31]
лекции по ТАУ
Экология [151]
учебник
Бухгалтерский учет и налогообложение в строительстве [56]
Дементьев А.Ю. - Практическое пособие
Психология [104]
Пип
информатика [80]
с# Карли Ватсон
современные стулья [0]
новинки
Поиск

Главная » 2010 » Февраль » 11 » Оператор switch
00:01
Оператор switch
Оператор switch
Оператор switch очень похож на оператор if в том смысле, что он также обес-
печивает условное выполнение кода в зависимости от результата выполненной
проверки. Однако оператор switch позволяет производить проверку для многих
значений переменной за один проход вместо того, чтобы проверять всего лишь
одно условие. Эти проверки ограничены отдельными значениями и не допускают
конструкций типа "больше, чем X", поэтому их использование имеет некоторые
отличия; однако такой способ является очень эффективным.
Принципиальная структура оператора switch имеет следующий вид:
switch {<контрольнаяПеременная>)
(
case <значение1>:
<код, который должен выполняться в том случае,
если <контрольнаяПеременная> == <значение1> >
\ break; \ ' * ; • • • • ••• • •
case <значение2>:
<код, который должен выполняться в том случае,
если <контрольнаяПеременная> == <значение2> >
break;
62 Глава 4
case <зна.чениеЫ>:
<код, который должен выполняться в том случае,
если <контрольнаяПеременная> -= <значениеЫ> >
break;
: ' УУ-Ш '; ' ' У-УУ: • ••'.••. '. У-'.
<код, который должен выполняться в том случае,
если <контрольнаяПеременная> /= ни одному из значений>
Значение, которым обладает <контрольнаяпеременная>, сравнивается со всеми
значениями <значениех>, каждое из которых имеет свой собственный оператор case;
в случае совпадения значений выполняется код, предусмотренный для данного
условия. Если ни одно из значений не совпало, будет выполняться код из раздела
default (при условии, что этот блок не пуст). После завершения выполнения кода
в некотором разделе выполняется еще одна команда — break. В случае выполне-
ния кода в одном из блоков case переход к выполнению другого оператора case
не происходит.
Такая логика выполнения программы является одним из отличий
языка С# от языка C++, в котором при обработке
операторов case разрешается переходить от выполнения
одного оператора к выполнению другого.
Оператор break в данном случае просто прерывает выполнение оператора
switch, и работа программы продолжается со следующего оператора.
В программе на С# имеются и другие способы избежать передачи управления
от одного оператора case другому. Мы можем использовать либо оператор return,
который приведет к прерыванию выполнения текущей функции, а не просто опе-
ратора switch (более подробно об этом будет рассказано в главе 6), либо оператор
goto. Оператор goto (он описан выше) в данном случае будет работать, поскольку
операторы case в программе на С# фактически выполняют роль меток. Например:
switch (<контрольнаяПеременная>)
{
case <значение1>:
<код, который должен выполняться в том случае,
если <контрольнаяПеременная> == <значение1> >
goto case <значение2>;
case <значение2>:
<код, который должен выполняться в том случае,
если <контрольнаяПеременная> == <значение2> >
break;
Имеется единственное исключение из общего правила, гласящего, что после
выполнения одного оператора case не может выполняться другой оператор case.
Если мы разместим несколько операторов case подряд (объединим их) перед
каким-либо блоком кода, мы фактически организуем одновременное выполнение
проверки нескольких условий. Если хотя бы одно из этих условий окажется выпол-
ненным, то управление будет передано на этот блок кода. Например:
swi t ch (<контрольнаяПеременная>)
{
case <значениеl>: • : •• . : •
case <значение2>:
<код, который должен выполняться в том случае,
если <контрольнаяПеременная> == <значение1>
или <контрольнаяПеременная> == <значение2> >
break;
Управление порядком выполнения 63
Обратите внимание, что эти условия также относятся и к оператору default.
Не существует никакого правила, требующего, чтобы этот оператор обязательно
находился в конце всего перечня сравнений, и при желании мы можем объединять
его с операторами case. Включение оператора, прерывающего нормальное выпол-
нение программы — break, goto или return,— гарантирует правильную последо-
вательность выполняемых действий в любом случае.
Все переменные оначениех^ использующиеся для сравнений, должны иметь
постоянное значение. Один из способом добиться этого — применение литераль-
ных значений:
1|||И
::::::ФФ'Ф:':••'•'•,•••'•••• :'••<-• '• ФФФ:Ф.'.-•;'.:: •• Ф^^фф:ш:Ш
^'•^ф:'ф-г-г;-^Ф%ф-Ф:Щ
если my Integer 1= ни одному из значений,
использовавшихся для сравнения>
Другой способ получить постоянные значения переменных — это использова-
ние переменных-констант. Переменные-константы являются точно такими же
переменными, как и все остальные, за исключением одного ключевого момента:
значение, которое в них содержится, не может быть изменено ни при каких
условиях. После того как мы присвоили переменной-константе какое-либо значе-
ние, оно будет оставаться неизменным на протяжении выполнения всей програм-
мы. Переменные-константы могут оказаться удобными в данном случае, поскольку
зачастую код легче понимать, когда используемые для сравнения значения не вид-
ны в момент выполнения сравнения.
Мы можем объявить переменную-константу, добавив ключевое слово const
к описанию типа переменной; при этом мы обязаны сразу определить ее значение.
Например:
const int intTwo = 2;
Этот код является вполне допустимым, однако если мы попытаемся выполнить
следующий код:
то получим сообщение об ошибке на этапе компиляции. Также приведет к ошибке
и попытка каким-либо образом изменить содержимое переменной-константы после
первоначального присваивания.
Давайте рассмотрим пример оператора switch, в котором используются пере-
менные-константы.
Практикум: использование оператора switch
1. Создайте новое консольное приложение с именем chO4ExO3
В директории C:\BegCSharp\Chapter4.
64 Глава 4
2. Добавьте следующий код в ciassi.cs:
static void Main(string[] args)
{
const string myName = *karli";
const string sexyName = "angelina";
const string siliyName = "ploppy";
string name;
Console.WriteLine(*What is your name?*);
name = Console.ReadLine();
switch (name.ToLower())
{ ' • • §A
case myName:
Console.WriteLine(*You have the same name as me!") ;
.'••:S. ;'/ А: ^У'А А ^-^УЩ^ШШЖ^
Console.WriteLine(*My, what a sexy name you have!") ;
break;
• • ' . •: : : :
Console,WriteLine(''That's a very silly name.");
.WriteLine("Hello {0}!", name);
;? loppy
|Tl»at*s a uery silly паяе.
Hello Floppy!
|Pi*ess aot? key to continue
H I I
....... г „„>,.
П
Ojxj
о. Запустите приложение и введите имя
(см. рис. слева).
Как это работает
В этом коде определяются три переменные-
константы типа string, затем от пользователя
принимается строка, после чего на консоль выводится текст в зависимости от вве-
денной строки. В данном случае строки представляют имена.
Когда мы выполняем сравнение введенного имени (переменной name) со значе-
ниями наших констант, то мы прежде всего переводим его в нижний регистр по-
средством оператора name. ToLower (). Этот стандартный оператор, который может
работать с любыми переменными типа string, оказывается очень удобным в тех
случаях, когда нет уверенности в том, что именно ввел пользователь. Такой способ
гарантирует, что все строки типа "Karlir, -kArii*, "karii" и т. д. совпадут с конт-
рольной Строкой *karli".
Собственно оператор switch занимается поиском совпадения введенной строки
с теми константами, которые мы определили в начале программы, и, в случае
успеха, выводит персональное приветствие пользователю. Если совпадения не
произошло, то мы просто приветствуем пользователя.
Операторы switch не имеют ограничений на количество содержащихся в них
разделов case:, поэтому вы можете расширить этот код и охватить все имена, ко-
торые только могут придти вам в голову... но в этом случае вам придется изрядно
поработать!

















Категория: информатика | Просмотров: 1052 | Добавил: basic | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Календарь
«  Февраль 2010  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

krutoto.ucoz.ru
Бесплатный конструктор сайтов - uCoz