|
Главная » 2010 » Февраль » 11 » Прекращение выполнения цикла
00:03 Прекращение выполнения цикла |
Прекращение выполнения цикла Иногда возникают ситуации, когда требуется более тонкий контроль за выпол- нением кода в цикле. В С# для этих целей предусмотрено четыре команды, с тре- мя из которых вы уже познакомились: • break — приводит к немедленному завершению цикла. • continue — приводит к немедленному завершению текущего прохода цикла (вычисления продолжаются со следующего прохода). • goto — позволяет выйти из цикла в помеченную точку кода (этот метод не рекомендуется использовать, если вы хотите получить легко читаемый и понимаемый код). • return — выводит из цикла и из функции, в которой он находится - (см. главу 6). Команда break позволяет просто выйти из цикла, при этом управление переда- ется на первую строку кода после цикла. Например: int i = 1; while (i <= 10) { i f (i == 6 V • . .\ .:, :v ' : . л :,;;.:;:; break; • ' • "•• Console.WriteLine("{0}*, i++) ; ••«-•::^ :: • ••. • •" . " V : : r } : : - ' • • ; • • • . ^ . / Ж ^ . ^ г : ш ^ - ^ Ш ' - - '-^,:':.•.. •• • • i " - ' - ; : - , • • : . . - . • • • • : ' Этот код выведет числа от 1 до 5, поскольку когда значение переменной i достиг- нет 6, команда break приведет к выходу из цикла. Команда continue прекращает выполнение текущего прохода цикла, а не всего цикла. Например: int i ; for (i = 1; i <= 10; i++) { i f ( ( i % 2) == 0) ' • •' • ' •• ' •' ' • • • COntinUe;.'... : •• . , .••:•.•.,•.:•. ; . '.• • ; , • : ''-••'.-;•' : •••_••• . . . . • , . . , . • : . : . . Console.WriteLine(i) ; Третий способ предполагает использование оператора goto, с которым вы по- знакомились ранее. Например: .. • ;: int i - 1 ; while (i <= 10) { if (i == 6) goto exitPoint; Console.WriteLine('{О}', i Console.WriteLine("Этот код никогда не будет выполняться!); exitPoint: Console.WriteLine("Этот код будет выполнен после того, • как произойдет выход из цикла посредством goto. ")f. Обратите внимание на то, что выход из цикла посредством команды goto допус- тим (разве что несколько неряшлив), а вот использование goto для входа в цикл извне запрещено. Управление порядком выполнения 75 Бесконечные циклы Возможно — в результате ошибки или преднамеренно — создать циклы, кото- рые никогда не завершатся: так называемые бесконечные циклы. В качестве са- мого простого примера можно привести следующий цикл: while (true) // код, вьшолняющийся в цикле Иногда такой цикл бывает полезен, тем более что из него всегда можно выйти, например, с помощью оператора break. Однако в тех случаях, когда создание бесконечного цикла происходит по недо- смотру, последствия могут оказаться очень неприятными. Рассмотрим следующий цикл, который очень напоминает цикл for из предыдущего раздела: i n t i = l ; • . : . • :.; : ' . ;; while (i <= 10) :'' ••'. •.:•;• ::;::• \ А С : ' ^ • • . . . ' • : " • '."'У-"''./"г'"/.'". if ((i % 2) « 0) continue; ; C o n s o l e . W r i t e L i n e ( ' { 0 } * , i + + ) ; '• ' - Й : ; ' -:: /^' :- :• ' :..•,.. •. •. • :: Здесь увеличение переменной цикла i происходит в последней строке цикла, т. е. после оператора continue. Поэтому если управление передается на оператор continue (а это произойдет, когда переменная i станет равной 2), следующая ите- рация будет исполняться с тем же значением переменной i, опять пройдет про- верка текущего значения i, начнет выполняться итерация и т. д. Это приведет к зависанию приложения. Обратите внимание, что в этом случае существует воз- можность выйти из зависшего приложения обычным способом, поэтому не придет- ся перезагружать компьютер. Итоги В этой главе мы расширили наши познания в области программирования, рас- смотрев различные конструкции, которые можно использовать в программах. Пра- вильное использование таких конструкций окажется- очень важным, когда вы начнете создавать более сложные приложения; а они будут встречаться сплошь и рядом на протяжении всей этой книги. Мы уделили некоторое время изучению булевой логики, а также достаточно по- дробно рассмотрели логику побитовых операций. Эти вопросы имеют очень боль- шое значение, когда дело доходит до использования ветвления и организации циклов в программах. Представляется необходимым хорошо изучить операторы и приемы, представленные в настоящей главе. Ветвление позволяет выполнять код по условию, что в сочетании с использова- нием циклов дает возможность создавать достаточно сложные конструкции. Когда цикл расположен внутри другого цикла, который в свою очередь находится внутри оператора if, помещенного внутри третьего цикла, то начинаешь понимать, почему так важно пользоваться отступами при написании программ. Если сдвинуть весь код к левому краю экрана, тут же возникнут трудности с его восприятием и еще большие трудности появятся при его отладке. Очень важно научиться использо- вать отступы уже на данном этапе: позднее вы сумеете это оценить! Конечно, VS выполняет эту работу за нас, однако в любом случае представляется полезным са- мостоятельно соблюдать отступы при наборе текста кода. 76 Глава 4 Упражнения 1. Если имеются две целые переменные vari и var2, то какую проверку необходимо выполнить, чтобы убедиться, что одно из них (но не оба) больше 10? 2. Напишите приложение, использующее логику из упражнения 1, которое получает два числа от пользователя и выводит их на экран, но если оба числа больше 10, отбрасывает их и запрашивает новые. 3. Что неправильно в приведенном ниже коде? for (int i = 1; i <== 10; Console.WriteLine(i) ; Измените приложение для вычисления множества Мандельброта таким образом, чтобы оно запрашивало у пользователя границы рисунка и выводило выбранную часть рисунка. Написанная нами программа выводит такое количество символов, которое умещается на одной строке консольного приложения; вам следует предусмотреть приведение любого выбранного участка изображения к этим же размерам с тем, чтобы максимизировать видимую область.
|
Категория: информатика |
Просмотров: 1178 |
Добавил: basic
| Рейтинг: 0.0/0 |
|
Статистика
Онлайн всего: 1 Гостей: 1 Пользователей: 0
|