Упражнение – Создание циклов итерации do и while
- 10 мин
На первый взгляд, do-while и while операторы являются еще одной итерационной конструкцией, позволяющей перебирать блок кода и тем самым изменяя поток выполнения кода. Однако после изучения того, как работает каждый из них, мы можем лучше определить нюансы каждой итерационной конструкции и когда их использовать.
Что такое оператор do-while?
Оператор do-while выполняет инструкцию или блок инструкций, пока указанное логическое выражение оценивается как true. Так как это выражение вычисляется после каждого выполнения цикла, цикл do-while выполняется один или несколько раз.
do
{
// This code executes at least one time
} while (true);
Поток выполнения начинается внутри фигурной скобки. Код выполняется по крайней мере один раз, а логическое выражение рядом с while ключевым словом вычисляется. Если логическое выражение возвращает true, блок кода выполняется снова.
Путем жёсткого кодирования логического выражения true, мы создали бесконечный цикл, который никогда не закончится, по крайней мере, не так, как он в настоящее время написан. Нам потребуется способ для выхода из цикла внутри блока кода. Мы немного позже обсудим критерии do-while выхода.
Теперь давайте подготовим среду кодирования и начнем изучение примеров кода, реализующих инструкцию do-while .
Подготовка среды программирования
Этот модуль включает практические действия, которые помогут вам в процессе создания и выполнения демонстрационного кода. Мы рекомендуем выполнить эти действия с помощью Visual Studio Code в качестве среды разработки. Использование Visual Studio Code для выполнения этих задач поможет вам стать более уверенным в написании и выполнении кода в среде разработки, которая используется профессионалами по всему миру.
Откройте Visual Studio Code.
Для открытия Visual Studio Code можно использовать меню Windows (или эквивалентный ресурс для другой ОС).
В меню "Файл Visual Studio Code" выберите "Открыть папку".
В диалоговом окне "Открыть папку " перейдите в папку "Рабочий стол Windows".
Если у вас есть другое расположение папки, в котором хранятся проекты кода, вместо этого можно использовать это расположение папки. Для этого обучения важно иметь расположение, которое легко найти и помнить.
В диалоговом окне "Открыть папку " выберите "Выбрать папку".
Если появится диалоговое окно безопасности с запросом доверия авторам, нажмите кнопку "Да".
В меню Терминал в Visual Studio Code выберите Новый терминал.
Обратите внимание, что в командной строке на панели терминала отображается путь текущей папки. Рассмотрим пример.
C:\Users\someuser\Desktop>Замечание
Если вы работаете на собственном компьютере, а не в песочнице или размещенной среде, и вы выполнили другие модули Microsoft Learn в этой серии C#, возможно, вы уже создали папку проекта для примеров кода. Если это так, можно пропустить следующий шаг, который используется для создания консольного приложения в папке TestProject.
В командной строке терминала, чтобы создать консольное приложение в указанной папке, введите следующую строку:
dotnet new console -o ./CsharpProjects/TestProjectЭта команда .NET CLI использует шаблон программы .NET для создания проекта консольного приложения C# в указанном расположении папки. Команда создает для вас папки CsharpProjects и TestProject и использует TestProject в качестве имени вашего файла
.csproj.Если отображается сообщение о том, что файлы уже существуют, перейдите к следующим шагам. Вы повторно используете существующие файлы проекта.
В представлении EXPLORER разверните папку CsharpProjects .
Вы увидите папку TestProject и два файла, файл программы C# с именем Program.cs и файл проекта C# с именем TestProject.csproj.
В меню "Файл Visual Studio Code" выберите "Открыть папку".
В диалоговом окне "Открыть папку " выберите папку CsharpProjects и выберите "Выбрать папку".
В представлении EXPLORER разверните папку TestProject и выберите Program.cs.
Удалите существующие строки кода.
Вы будете использовать этот консольный проект C# для создания, сборки и запуска примеров кода во время этого модуля.
Закройте панель терминала.
Напишите инструкцию do-while, чтобы прервать выполнение, когда сгенерировано заданное случайное число.
Давайте напишем код, который будет создавать случайные числа от 1 до 10, пока не создадим число 7. Это может занять всего одну итерацию, чтобы получить 7, или это может занять десятки итераций.
Убедитесь, что у вас открыт Visual Studio Code и в панели редактора отображается файл Program.cs.
Замечание
Program.cs должно быть пустым. Если нет, выберите и удалите все строки кода.
Введите следующий код в редактор Visual Studio Code.
Random random = new Random(); int current = 0; do { current = random.Next(1, 11); Console.WriteLine(current); } while (current != 7);В меню "Файл Visual Studio Code" нажмите кнопку "Сохранить".
Перед созданием или выполнением кода необходимо сохранить файл Program.cs.
На панели обозревателя откройте терминал в папке TestProject, щелкните правой кнопкой мыши TestProject и выберите "Открыть в интегрированном терминале".
Откроется панель терминала. Терминал должен содержать командную строку, показывающую, что терминал открыт для расположения папки TestProject.
В командной строке, чтобы запустить код, введите dotnet run и нажмите Enter.
Замечание
Если появится сообщение "Не удалось найти проект для запуска", убедитесь, что в командной строке терминала отображается ожидаемое расположение папки TestProject. Например:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Проверьте ваши результаты.
Так как созданные числа являются случайными, результаты будут отличаться. Однако значение
7будет последним числом для печати, так как логическое выражение будет принимать значениеfalseпри генерации числа 7, а поток выполнения выйдет из блока кода.2 5 8 2 7Уделите минуту, чтобы просмотреть ваш код.
Одним из ключевых уроков в рамках этой первой задачи является то, что блок кода внутри
do-whileцикла будет выполняться как минимум один раз. Это может итерировать большое количество раз, и вряд ли мы знаем заранее, сколько итераций будет.Также важно отметить, что код внутри блока кода влияет на то, следует ли продолжать итерацию по блоку кода или нет. Блок кода, влияющий на критерии выхода, является основной причиной выбора
do-whileилиwhileинструкций, а не других инструкций итерации. Обаforeachиforзависят от внешних факторов, чтобы определить количество итераций блока кода.
Написание инструкции while, которая выполняет итерацию только в то время как случайное число больше некоторого значения
Теперь давайте рассмотрим while заявление.
Используйте редактор Visual Studio Code для обновления кода следующим образом:
Random random = new Random(); int current = random.Next(1, 11); /* do { current = random.Next(1, 11); Console.WriteLine(current); } while (current != 7); */ while (current >= 3) { Console.WriteLine(current); current = random.Next(1, 11); } Console.WriteLine($"Last number: {current}");Замечание
В этом случае мы позиционируем ключевое
whileслово и логическое выражение перед блоком кода. Это изменяет смысл кода и действует как "шлюз", чтобы разрешить потоку выполнения входить только если логическое выражение оценивается как истина.Сохраните файл кода и используйте Visual Studio Code для запуска кода.
Введите
dotnet runиз командной строки терминала, чтобы запустить код.Просмотрите указанные выходные значения.
Так как числа являются случайными, код будет создавать другую последовательность.
9 7 5 Last number: 1Уделите минуту, чтобы просмотреть ваш код.
В верхнем коде мы используем
randomдля инициализации переменнойintс именемcurrent. Наша следующая активная строка кода — это нашаwhileинструкция.Наша
whileинструкция будет итерироваться на основе логического выражения(current >= 3). Мы не знаем, какое значение будет назначеноcurrent, но существуют возможности, влияющие на нашwhileцикл:- Если
currentинициализирован значением, которое больше или равно3, то логическое выражение вернетtrue, и выполнение перейдет в блок кода. В блоке кода первое, что мы делаем, — запись значенияcurrentв консоль. Затем в блоке кода мы обновляем значениеcurrentс новым случайным значением. На этом моменте управление возвращается в началоwhileинструкции, где вычисляется логическое выражение. Этот процесс продолжается до тех пор, пока логическое выражение не вернётfalse, и поток выполнения не выйдет из блока кода. - Если
currentинициализировано (в верхней части нашего кода) значением, меньшим чем3, то логическое выражение вернетfalse, и блок кода никогда не выполнится.
Последняя строка кода записывает значение
currentв консоль. Этот код запускается независимо от того, был ли выполнен блок кода итерации, и позволяет нам записать окончательное значениеcurrentв консоль.- Если
Используйте инструкцию continue, чтобы перейти непосредственно к логическому выражению
В некоторых случаях мы хотим отключить оставшуюся часть кода в блоке кода и продолжить следующую итерацию. Это можно сделать с помощью инструкции continue .
Используйте редактор Visual Studio Code для обновления кода следующим образом:
Random random = new Random(); int current = random.Next(1, 11); do { current = random.Next(1, 11); if (current >= 8) continue; Console.WriteLine(current); } while (current != 7); /* while (current >= 3) { Console.WriteLine(current); current = random.Next(1, 11); } Console.WriteLine($"Last number: {current}"); */Уделите минуту, чтобы просмотреть ваш код.
Обратите внимание, что мы переключились обратно на
do-while. Ado-whileгарантирует, что цикл будет итерировать по крайней мере один раз.Первое, что мы делаем внутри блока кода, заключается в назначении нового случайного значения
current. Далее мы проверяемcurrent, превышает ли значение или равно8. Если это выражение вернётtrue, ключевое словоcontinueпередаст управление в конец блока кода, иwhileоценит(current != 7). Таким образом, цикл будет продолжать итерировать, пока значениеcurrentне равно7.Ключом к этому шагу упражнения является строка кода, содержащая ключевое
continueслово:if (current >= 8) continue;Поскольку наш код, записывающий значение
currentв консоль, находится послеif (current >= 8) continue;, это гарантирует, что значениеcurrent, которое больше или равно8, никогда не будет записано в окно вывода.Давайте попробуем.
Сохраните файл кода и используйте Visual Studio Code для запуска кода.
Введите
dotnet runиз командной строки терминала, чтобы запустить код.Просмотрите указанные выходные значения.
5 1 6 7Скорее всего, вы увидите результаты, отличные от того, что отображается ниже. Однако вы не увидите значения
8или больше в окне вывода, прежде чем выполнение кода заканчивается значением7.Рассмотрим разницу между
continueиbreakзаявлениями.Как вы видели в последнем шаге, инструкция
continueпередает выполнение в конец текущей итерации. Это поведение отличается от поведения, который мы видели с инструкциейbreak. Операторbreakзавершает итерацию (илиswitch) и передает управление инструкции, следующей за завершенной инструкцией. Если после завершаемой инструкции нет инструкции, управляйте передачей в конец файла или метода.
Обзор
Есть несколько важных идей, которые вы должны забрать из этого урока:
- Оператор
do-whileвыполняет итерацию по блоку кода как минимум один раз и может продолжать итерацию на основе булевого выражения. Оценка логического выражения обычно зависит от определенного значения, созданного или полученного внутри блока кода. - Оператор
whileсначала вычисляет логическое выражение и продолжает выполнение итерации по блоку кода до тех пор, пока логическое выражение становится истиннымtrue. - Ключевое
continueслово для перехода к логическому выражению.