Упражнение. Создание и проверка цикла ввода новых данных домашних животных
В этом упражнении вы разрабатываете код, который управляет входами новых ourAnimals данных массива. Вы вычисляете начальные значения переменных управления циклом и создаете цикл, который собирает данные, указанные пользователем, о животных. Ниже приведены подробные задачи, которые выполняются во время этого упражнения:
- Вычисляйте petCount: напишите код, который подсчитывает количество домашних животных в массиве
ourAnimalsс назначенными данными. - Условные сообщения: написание кода для отображения выходных данных сообщений, если
petCountменьшеmaxPets. - Внешний цикл: постройте структуру цикла, которая будет использоваться для ввода новых
ourAnimalsданных массива. - Условия выхода: написать код, который оценивает условие выхода для цикла ввода данных нового массива ourAnimals.
- Тест проверки: выполнение тестов проверки для кода, который вы разрабатываете в этом упражнении.
Это важно
Перед началом этого упражнения необходимо выполнить предыдущее упражнение в этом модуле.
Подсчитайте количество домашних животных в массиве ourAnimals
В этой задаче вы определяете критерии завершения цикла ввода данных и создаете for цикл, который можно использовать для подсчета количества домашних животных в ourAnimals, которым были назначены данные.
Убедитесь, что Visual Studio Code открыт и что файл Program.cs отображается в редакторе.
Найдите инструкцию
switch(menuSelection)и найдитеcase "2":строку кода.Найдите инструкцию
Console.WriteLine(), отображающую сообщение "скоро будет", а затем замените её пустой строкой кода.В пустой строке кода, созданной для объявления
anotherPetиpetCountпеременных, введите следующий код:string anotherPet = "y"; int petCount = 0;Эти две переменные управляют итерацией
whileцикла, который используется для ввода новых данных домашних животных. Вы инициализируете обе переменные как часть объявления.anotherPetинициализируется значениемyперед началом циклаwhile. Он получит назначенное пользователем значение, либоy, либоnвнутри циклаwhile.petCountпредставляет количество животных с назначенными характеристиками домашних животных. За пределамиwhileцикла ей будет назначено вычисленное значение, а внутри1цикла оно будет увеличиваться наwhileкаждый раз при добавлении нового животного в массивourAnimals.
Это важно
Область переменных всегда должна быть максимально узкой. В приложении Contoso Pets можно задать область
petCountна уровне приложения, а не области вcase "2":блоке кода. Более широкая область позволяет получить доступpetCountиз любого места в приложении. Если область действияpetCountбыла ограничена на уровне приложения, ей можно назначить значение при создании примера данных и программно управлять его значением в оставшейся части приложения. Например, когда вы находите дом для питомца и удаляете животное из массиваourAnimals, вы могли бы уменьшитьpetCountна1. Вопрос заключается в том, на каком уровне следует ограничить переменную, если вы не уверены, будет ли она использоваться в других частях приложения? В этом случае заманчиво применятьpetCountна уровне приложения, даже если вы не используете его в другом месте. В конце концов, определение областиpetCountна уровне приложения гарантирует, что она будет доступна, если вы решите использовать её в другом месте. Возможно, вы также можете ограничить другие переменные на уровне приложения. Таким образом, переменные всегда находятся в области видимости и доступны. Так почему бы не объявить переменные на уровне приложения, если вы думаете, что они могут быть использованы позже в приложении? Области переменных на более высоком уровне, чем необходимо, может привести к проблемам. Расширение области действия увеличивает требования к ресурсам вашего приложения и может подвергать его ненужному риску безопасности. По мере увеличения и сложности приложений требуется больше ресурсов. Телефоны и компьютеры выделяют память для этих ресурсов, когда они находятся в контексте. По мере того как приложения становятся более "реальными", они становятся более доступными. Приложения часто доступны из облака или других приложений. Усугубляя эти проблемы, приложения часто остаются запущенными, даже когда они не используются. Важно держать требования к ресурсам приложения под контролем и обеспечивать минимальный след безопасности. Хотя современные операционные системы выполняют большую работу по управлению ресурсами и защите приложений, рекомендуется сохранить переменные на уровне, где они действительно необходимы. Если вы решите использоватьpetCountболее широко в приложении, вы можете обновить код наpetCountна более высоком уровне. Не забудьте сохранить переменные в пределах максимально узкой области и увеличить их область только при необходимости.На строке кода под объявлениями переменных создайте цикл, который перебирает животных в массиве
ourAnimals, введите следующий код:for (int i = 0; i < maxPets; i++) { }Этот код должен выглядеть знакомым. Вы будете использовать этот
forцикл каждый раз, когда итерируете поourAnimalsмассиву.В блоке кода цикла
for, чтобы проверить, назначены ли данные о характеристиках питомцев какому-либо животному, введите следующий код:if (ourAnimals[i, 0] != "ID #: ") { }Опять же, этот код должен выглядеть знакомым. Вы будете использовать эту
ifинструкцию каждый раз, когда вы проверяете, назначены ли характеристики домашних животных.В блоке кода созданного вами
ifдля увеличенияpetCountна 1 введите следующий код:petCount += 1;Пройдите минуту, чтобы проверить завершенный
forцикл.Завершенный
forцикл должен выглядеть следующим образом:for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { petCount += 1; } }Этот код будет перебирать массив
ourAnimals, проверяя на наличие назначенных данных. Когда обнаруживается животное с назначенными данными, значениеpetCounterувеличивается.В меню Файл в Visual Studio Code выберите Сохранить.
Откройте панель встроенного терминала в Visual Studio Code и введите команду для создания программы.
Чтобы открыть интегрированный терминал из представления EXPLORER, щелкните правой кнопкой мыши Starter, а затем выберите Открыть в интегрированном терминале. Вы также можете использовать меню "Вид " или "Терминал " для открытия панели встроенного терминала.
Чтобы создать программу, введите
dotnet buildкоманду из командной строки терминала.Исправьте все ошибки сборки, которые вы видите перед продолжением.
Замечание
Сейчас вы можете игнорировать предупреждающее сообщение о том, что
anotherPetприсваивается, но никогда не используется. Вы добавите код, который используетanotherPetпозже в этом упражнении.Если у вас есть ошибки сборки, помните, что сообщения об ошибках и предупреждениях указывают, в чём заключается проблема и где её можно найти. При обновлении кода не забудьте сохранить изменения перед повторной сборкой.
Закройте панель терминала.
Отобразить сообщение, если количество питомцев меньше максимального значения.
В этой задаче вы проверяете, меньше ли petCount, чем maxPets, и если это так, отображаете сообщение для пользователя.
В пустой строке кода под созданным циклом
for, чтобы узнатьpetCount, меньшеmaxPetsли, введите следующий код:if (petCount < maxPets) { }В блоке кода инструкции
if, чтобы отобразить сообщение пользователю, введите следующий код:Console.WriteLine($"We currently have {petCount} pets that need homes. We can manage {(maxPets - petCount)} more.");Пользователи приложения собираются вводить характеристики домашних животных. Это сообщение предоставляет важный контекст.
Просмотрите ветвь кода инструкции
case "2":.switchНа этом этапе ветвь
case "2":кода должна выглядеть следующим образом:case "2": // Add a new animal friend to the ourAnimals array string anotherPet = "y"; int petCount = 0; for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { petCount += 1; } } if (petCount < maxPets) { Console.WriteLine($"We currently have {petCount} pets that need homes. We can manage {(maxPets - petCount)} more."); } Console.WriteLine("Press the Enter key to continue."); readResult = Console.ReadLine(); break;В меню Файл в Visual Studio Code выберите Сохранить.
Откройте панель встроенного терминала в Visual Studio Code и введите команду для создания программы.
Исправьте все ошибки сборки, которые вы видите перед продолжением.
Опять же, можно игнорировать сообщение "Предупреждение" о
anotherPetназначении, но никогда не использовалось. В следующей задаче вы начнете создаватьwhileцикл, используемый для ввода данных для одного или нескольких домашних животных. Выражение, которое вы создаете дляwhileцикла, будет использоватьanotherPet, и это предупреждение исчезнет.Помните, что предупреждающие сообщения — это вещи, о которых вы должны беспокоиться, но они не препятствуют запуску программы.
В командной строке терминала введите команду для запуска программы.
Введите команду в командной строке
dotnet runтерминала, чтобы запустить код программы.Если код не создает ошибку среды выполнения, главное меню приложения должно отображаться на панели терминала.
В командной строке терминала введите 2
Это значение соответствует ветви
case "2":кода.Убедитесь, что в терминале отображается следующее сообщение.
We currently have 4 pets that need homes. We can manage 4 more. Press the Enter key to continue.Если вы не видите ожидаемое сообщение, просмотрите код, чтобы определить и устранить проблему. Сохраните изменения, перестройте и снова запустите приложение. Прежде чем продолжить, обязательно получите код, как ожидалось.
В командной строке терминала нажмите клавишу ВВОД, чтобы продолжить выполнение приложения.
Закройте приложение и закройте панель терминала.
Создайте структуру цикла, которая будет использоваться для ввода данных нового массива нашиЖивотные.
В этой задаче вы создаёте while цикл, который продолжает итерировать до тех пор, пока anotherPet равно y и petCount меньше maxPets.
В редакторе кода создайте пустую строку кода под
if (petCount < maxPets)блоком кода.Чтобы начать процесс создания вашего нового цикла
while, введите следующий код:while (anotherPet == "y" && petCount < maxPets) { }В меню Файл в Visual Studio Code выберите Сохранить.
Откройте панель встроенного терминала в Visual Studio Code и введите команду для создания программы.
Обратите внимание, что вы больше не получаете предупреждающее сообщение о том, что
anotherPetне используется.Если сообщались об ошибках сборки или предупреждениях, исправьте проблемы перед продолжением.
Проверка условия выхода из цикла для новых питомцев
В этой задаче вы обновляете while (anotherPet == "y" && petCount < maxPets) блок кода. Новый код увеличивает petCount, а затем проверяет, меньше ли petCount чем maxPets. Если petCount меньше maxPets, спросите пользователя, хочет ли он ввести информацию для другого животного, и убедитесь, что ответ — это либо y, либо n.
while (anotherPet == "y" && petCount < maxPets) После блока кода проверьте значение petCount. Если petCount равно maxPets, вы сообщите пользователю, что больше домашних животных не может быть добавлено.
Замечание
Код, используемый для ввода данных домашних животных, разработан в следующем упражнении. На данный момент petCount увеличивается так, как если бы данные были введены и сохранены в массив ourAnimals. Это позволяет завершить разработку логики кода, связанной с циклом while .
Создайте пустую строку кода внутри блока кода цикла
while (anotherPet == "y" && petCount < maxPets), который вы создали в предыдущей задаче.Чтобы увеличить
petCount, введите следующий код:// increment petCount (the array is zero-based, so we increment the counter after adding to the array) petCount = petCount + 1;Чтобы проверить, является ли значение
petCountменьше значенияmaxPets, введите следующий код:// check maxPet limit if (petCount < maxPets) { }Внутри блока кода инструкции
if, которую вы создали, задайте пользователю вопрос, хотят ли они добавить еще одно домашнее животное, введите следующий код:// another pet? Console.WriteLine("Do you want to enter info for another pet (y/n)");WriteLine()Под введенным сообщением, чтобы прочитать ответ пользователя и убедиться, что пользователь ввел "y" или "n", введите следующий код:do { readResult = Console.ReadLine(); if (readResult != null) { anotherPet = readResult.ToLower(); } } while (anotherPet != "y" && anotherPet != "n");Найдите инструкцию
break, которая отделяетcase "2";отcase "3";в вашей инструкцииswitch.Обратите внимание на инструкции
Console.WriteLine()иConsole.ReadLine()в конце нашего кодаcase "2";.Этот код отображает сообщение пользователю, а затем приостанавливает приложение.
Чтобы заключить инструкции
Console.WriteLine()иConsole.ReadLine()внутри инструкцииif, обновите ваш код следующим образом:if (petCount >= maxPets) { Console.WriteLine("Press the Enter key to continue."); readResult = Console.ReadLine(); } break; case "3":Значение
petCountувеличивается внутриwhileцикла. ЕслиpetCountравноmaxPets, больше домашних животных не можно добавить вourAnimalsмассив. Вы должны сообщить пользователю, когда это происходит.Чтобы сообщить пользователю, что домашние животные Contoso достигли своей емкости, обновите код следующим образом:
if (petCount >= maxPets) { Console.WriteLine("We have reached our limit on the number of pets that we can manage."); Console.WriteLine("Press the Enter key to continue."); readResult = Console.ReadLine(); } break; case "3":Потратьте минуту, чтобы просмотреть код внутри цикла
whileи созданное вами сообщение для пользователя.Цикл
while (anotherPet == "y" && petCount < maxPets)и код, отображающий сообщение пользователя, должен выглядеть следующим образом:while (anotherPet == "y" && petCount < maxPets) { // increment petCount (the array is zero-based, so we increment the counter after adding to the array) petCount = petCount + 1; // check maxPet limit if (petCount < maxPets) { // another pet? Console.WriteLine("Do you want to enter info for another pet (y/n)"); do { readResult = Console.ReadLine(); if (readResult != null) { anotherPet = readResult.ToLower(); } } while (anotherPet != "y" && anotherPet != "n"); } } if (petCount >= maxPets) { Console.WriteLine("We have reached our limit on the number of pets that we can manage."); Console.WriteLine("Press the Enter key to continue."); readResult = Console.ReadLine(); }В меню Файл в Visual Studio Code выберите Сохранить.
Откройте панель встроенного терминала в Visual Studio Code и введите команду для создания программы.
Исправьте все ошибки сборки или предупреждения, которые вы видите перед продолжением.
Проверь свою работу
В этой задаче вы запустите приложение из встроенного терминала и убедитесь, что созданная логика циклирования и ветвления работает должным образом.
При необходимости откройте панель интегрированного терминала Visual Studio Code.
В командной строке терминала введите dotnet run
В командной строке терминала введите 2
Убедитесь, что отображаются следующие сообщения:
We currently have 4 pets that need homes. We can manage 4 more. Do you want to enter info for another pet (y/n)В командной строке терминала введите n
Убедитесь, что код завершает цикл ввода новых домашних животных при вводе "n".
Если логика кода работает должным образом, вы увидите главное меню, отображаемое в терминале.
Если код не выходит из цикла, когда ожидается, нажмите клавиши CTRL+C в терминале, чтобы принудительно завершить выполнение. Необходимо вручную пройтись по коду и отслеживать значения переменных критериев выхода. При необходимости обновите код, чтобы убедиться, что вы выходите из
whileцикла, когда пользователь вводит "n". Сохраните изменения, перестройте программу и выполните тест проверки, чтобы вернуться к этому моменту.В командной строке терминала введите 2
Еще раз вы увидите следующие сообщения:
We currently have 4 pets that need homes. We can manage 4 more. Do you want to enter info for another pet (y/n)В командной строке терминала введите y
Учтите, как
petCountиспользуется в коде.Перед проверкой кода необходимо понять логику кода.
В этом случае логика кода зависит от связи между
petCountиmaxPets. Вы знаете, чтоmaxPetsприсваивается значение8, но что оpetCount? Следующие элементы помогают оценить реализованную логику:Вы знаете, что
petCountявляется4в момент входа в первую итерациюwhileцикла.При каждой итерации цикла, вы знаете, что
petCountувеличивается.Вы знаете, что назначенное
petCountзначение и способpetCountувеличения влияют на то, как данные хранятся в массивеourAnimals. Следующие элементы объясняют связь междуpetCountданными, хранящимися вourAnimals:- Приложение добавляет четырех домашних животных в
ourAnimalsмассив при создании примеров данных. - Приложение сохраняет новые данные в массив
ourAnimals, когда значениеpetCountявляется4. Это не ошибка. Код имеет смысл, когда вы вспоминаете, что нумерация элементов массива начинается с нуля. Например,ourAnimals[0,0]содержит идентификатор животного для животных1иourAnimals[3,0]содержит идентификатор животного для животного4. Поэтому, когдаpetCount4, вы храните данные для пятого питомца. - Приложение будет сохранять данные домашних животных в массив перед увеличением
petCount. - Приложение увеличивает
petCount, прежде чем предложить пользователю добавить еще одно животное. - Когда приложение отображает запрос "Вы хотите ввести сведения для другого животного (y/n)" в первый раз,
petCountуже имеет значение5.
- Приложение добавляет четырех домашних животных в
Если пользователь вводит y при первом выводе запроса "Хотите ввести информацию для другого питомца (y/n)", вы знаете, что:
- Цикл
while (anotherPet == "y" && petCount < maxPets)будет итерировать. Вы знаете, что цикл будет итерировать, потому чтоanotherPet == "y"иpetCount < maxPets. - Значение, назначенное для
petCountэтого параметра, будет увеличиваться (приwhileитерации цикла). - Значение, присвоенное
petCount, будет равно6(после первого ввода пользователем y).
- Цикл
Имейте в виду этот анализ логики кода при продолжении тестирования приложения.
Обратите внимание: панель терминала обновляется с таким же сообщением "еще одно домашнее животное?", но ваш код не отображает обновленный
petCount.На панели терминала теперь должны отображаться следующие выходные данные:
We currently have 4 pets that need homes. We can manage 4 more. Do you want to enter info for another pet (y/n) y Do you want to enter info for another pet (y/n)В командной строке терминала введите y
При вводе
yвторого разаpetCountувеличивается до7. ТакpetCountпо-прежнему меньше, чемmaxPetsВ командной строке терминала введите y
При вводе
yв третий разpetCountувеличивается до8. ТеперьpetCountравноmaxPetsУбедитесь, что код завершает
whileцикл при вводе y в третий раз.На панели терминала теперь должны отображаться следующие выходные данные:
We currently have 4 pets that need homes. We can manage 4 more. Do you want to enter info for another pet (y/n) y Do you want to enter info for another pet (y/n) y Do you want to enter info for another pet (y/n) y We have reached our limit on the number of pets that we can manage. Press the Enter key to continue.Если код не завершает цикл, когда ожидается, пошагово выполните его вручную и проследите за значениями переменных критерия выхода. Обновите код, чтобы обеспечить выход из цикла при
petCountдостижении значения, равного значениюmaxPets. Продолжайте отвечать "y", пока не узнаете, чтоpetCountравноmaxPets, которое по умолчанию имеет значение8.В командной строке терминала нажмите клавишу ВВОД, чтобы продолжить выполнение приложения.
Закройте приложение и закройте панель терминала.