Упражнение. Создание и проверка цикла ввода новых данных домашних животных

Завершено

В этом упражнении вы разрабатываете код, который управляет входами новых ourAnimals данных массива. Вы вычисляете начальные значения переменных управления циклом и создаете цикл, который собирает данные, указанные пользователем, о животных. Ниже приведены подробные задачи, которые выполняются во время этого упражнения:

  1. Вычисляйте petCount: напишите код, который подсчитывает количество домашних животных в массиве ourAnimals с назначенными данными.
  2. Условные сообщения: написание кода для отображения выходных данных сообщений, если petCount меньше maxPets.
  3. Внешний цикл: постройте структуру цикла, которая будет использоваться для ввода новых ourAnimals данных массива.
  4. Условия выхода: написать код, который оценивает условие выхода для цикла ввода данных нового массива ourAnimals.
  5. Тест проверки: выполнение тестов проверки для кода, который вы разрабатываете в этом упражнении.

Это важно

Перед началом этого упражнения необходимо выполнить предыдущее упражнение в этом модуле.

Подсчитайте количество домашних животных в массиве ourAnimals

В этой задаче вы определяете критерии завершения цикла ввода данных и создаете for цикл, который можно использовать для подсчета количества домашних животных в ourAnimals, которым были назначены данные.

  1. Убедитесь, что Visual Studio Code открыт и что файл Program.cs отображается в редакторе.

  2. Найдите инструкцию switch(menuSelection) и найдите case "2": строку кода.

  3. Найдите инструкцию Console.WriteLine(), отображающую сообщение "скоро будет", а затем замените её пустой строкой кода.

  4. В пустой строке кода, созданной для объявления 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 на более высоком уровне. Не забудьте сохранить переменные в пределах максимально узкой области и увеличить их область только при необходимости.

  5. На строке кода под объявлениями переменных создайте цикл, который перебирает животных в массиве ourAnimals, введите следующий код:

    for (int i = 0; i < maxPets; i++)
    {
    }
    

    Этот код должен выглядеть знакомым. Вы будете использовать этот for цикл каждый раз, когда итерируете по ourAnimals массиву.

  6. В блоке кода цикла for, чтобы проверить, назначены ли данные о характеристиках питомцев какому-либо животному, введите следующий код:

    if (ourAnimals[i, 0] != "ID #: ")
    {
    }
    

    Опять же, этот код должен выглядеть знакомым. Вы будете использовать эту if инструкцию каждый раз, когда вы проверяете, назначены ли характеристики домашних животных.

  7. В блоке кода созданного вами if для увеличения petCount на 1 введите следующий код:

    petCount += 1;
    
  8. Пройдите минуту, чтобы проверить завершенный for цикл.

    Завершенный for цикл должен выглядеть следующим образом:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
            petCount += 1;
        }
    }
    

    Этот код будет перебирать массив ourAnimals, проверяя на наличие назначенных данных. Когда обнаруживается животное с назначенными данными, значение petCounter увеличивается.

  9. В меню Файл в Visual Studio Code выберите Сохранить.

  10. Откройте панель встроенного терминала в Visual Studio Code и введите команду для создания программы.

    Чтобы открыть интегрированный терминал из представления EXPLORER, щелкните правой кнопкой мыши Starter, а затем выберите Открыть в интегрированном терминале. Вы также можете использовать меню "Вид " или "Терминал " для открытия панели встроенного терминала.

    Чтобы создать программу, введите dotnet build команду из командной строки терминала.

  11. Исправьте все ошибки сборки, которые вы видите перед продолжением.

    Замечание

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

    Если у вас есть ошибки сборки, помните, что сообщения об ошибках и предупреждениях указывают, в чём заключается проблема и где её можно найти. При обновлении кода не забудьте сохранить изменения перед повторной сборкой.

  12. Закройте панель терминала.

Отобразить сообщение, если количество питомцев меньше максимального значения.

В этой задаче вы проверяете, меньше ли petCount, чем maxPets, и если это так, отображаете сообщение для пользователя.

  1. В пустой строке кода под созданным циклом for , чтобы узнать petCount , меньше maxPetsли, введите следующий код:

    if (petCount < maxPets)
    {
    }
    
  2. В блоке кода инструкции if , чтобы отобразить сообщение пользователю, введите следующий код:

    Console.WriteLine($"We currently have {petCount} pets that need homes. We can manage {(maxPets - petCount)} more.");
    

    Пользователи приложения собираются вводить характеристики домашних животных. Это сообщение предоставляет важный контекст.

  3. Просмотрите ветвь кода инструкции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;
    
  4. В меню Файл в Visual Studio Code выберите Сохранить.

  5. Откройте панель встроенного терминала в Visual Studio Code и введите команду для создания программы.

  6. Исправьте все ошибки сборки, которые вы видите перед продолжением.

    Опять же, можно игнорировать сообщение "Предупреждение" о anotherPet назначении, но никогда не использовалось. В следующей задаче вы начнете создавать while цикл, используемый для ввода данных для одного или нескольких домашних животных. Выражение, которое вы создаете для while цикла, будет использовать anotherPet, и это предупреждение исчезнет.

    Помните, что предупреждающие сообщения — это вещи, о которых вы должны беспокоиться, но они не препятствуют запуску программы.

  7. В командной строке терминала введите команду для запуска программы.

    Введите команду в командной строке dotnet run терминала, чтобы запустить код программы.

    Если код не создает ошибку среды выполнения, главное меню приложения должно отображаться на панели терминала.

  8. В командной строке терминала введите 2

    Это значение соответствует ветви case "2": кода.

  9. Убедитесь, что в терминале отображается следующее сообщение.

    We currently have 4 pets that need homes. We can manage 4 more.
    Press the Enter key to continue.
    

    Если вы не видите ожидаемое сообщение, просмотрите код, чтобы определить и устранить проблему. Сохраните изменения, перестройте и снова запустите приложение. Прежде чем продолжить, обязательно получите код, как ожидалось.

  10. В командной строке терминала нажмите клавишу ВВОД, чтобы продолжить выполнение приложения.

  11. Закройте приложение и закройте панель терминала.

Создайте структуру цикла, которая будет использоваться для ввода данных нового массива нашиЖивотные.

В этой задаче вы создаёте while цикл, который продолжает итерировать до тех пор, пока anotherPet равно y и petCount меньше maxPets.

  1. В редакторе кода создайте пустую строку кода под if (petCount < maxPets) блоком кода.

  2. Чтобы начать процесс создания вашего нового цикла while, введите следующий код:

    while (anotherPet == "y" && petCount < maxPets)
    {
    }
    
  3. В меню Файл в Visual Studio Code выберите Сохранить.

  4. Откройте панель встроенного терминала в Visual Studio Code и введите команду для создания программы.

  5. Обратите внимание, что вы больше не получаете предупреждающее сообщение о том, что anotherPet не используется.

    Если сообщались об ошибках сборки или предупреждениях, исправьте проблемы перед продолжением.

Проверка условия выхода из цикла для новых питомцев

В этой задаче вы обновляете while (anotherPet == "y" && petCount < maxPets) блок кода. Новый код увеличивает petCount, а затем проверяет, меньше ли petCount чем maxPets. Если petCount меньше maxPets, спросите пользователя, хочет ли он ввести информацию для другого животного, и убедитесь, что ответ — это либо y, либо n. while (anotherPet == "y" && petCount < maxPets) После блока кода проверьте значение petCount. Если petCount равно maxPets, вы сообщите пользователю, что больше домашних животных не может быть добавлено.

Замечание

Код, используемый для ввода данных домашних животных, разработан в следующем упражнении. На данный момент petCount увеличивается так, как если бы данные были введены и сохранены в массив ourAnimals. Это позволяет завершить разработку логики кода, связанной с циклом while .

  1. Создайте пустую строку кода внутри блока кода цикла while (anotherPet == "y" && petCount < maxPets), который вы создали в предыдущей задаче.

  2. Чтобы увеличить petCount, введите следующий код:

    // increment petCount (the array is zero-based, so we increment the counter after adding to the array)
    petCount = petCount + 1;
    
  3. Чтобы проверить, является ли значение petCount меньше значения maxPets, введите следующий код:

    // check maxPet limit
    if (petCount < maxPets)
    {
    }
    
  4. Внутри блока кода инструкции if, которую вы создали, задайте пользователю вопрос, хотят ли они добавить еще одно домашнее животное, введите следующий код:

    // another pet?
    Console.WriteLine("Do you want to enter info for another pet (y/n)");
    
  5. WriteLine() Под введенным сообщением, чтобы прочитать ответ пользователя и убедиться, что пользователь ввел "y" или "n", введите следующий код:

    do
    {
        readResult = Console.ReadLine();
        if (readResult != null)
        {
            anotherPet = readResult.ToLower();
        }
    
    } while (anotherPet != "y" && anotherPet != "n");
    
  6. Найдите инструкцию break, которая отделяет case "2"; от case "3"; в вашей инструкции switch.

  7. Обратите внимание на инструкции Console.WriteLine() и Console.ReadLine() в конце нашего кода case "2";.

    Этот код отображает сообщение пользователю, а затем приостанавливает приложение.

  8. Чтобы заключить инструкции 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 массив. Вы должны сообщить пользователю, когда это происходит.

  9. Чтобы сообщить пользователю, что домашние животные 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":
    
  10. Потратьте минуту, чтобы просмотреть код внутри цикла 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();
    }
    
  11. В меню Файл в Visual Studio Code выберите Сохранить.

  12. Откройте панель встроенного терминала в Visual Studio Code и введите команду для создания программы.

  13. Исправьте все ошибки сборки или предупреждения, которые вы видите перед продолжением.

Проверь свою работу

В этой задаче вы запустите приложение из встроенного терминала и убедитесь, что созданная логика циклирования и ветвления работает должным образом.

  1. При необходимости откройте панель интегрированного терминала Visual Studio Code.

  2. В командной строке терминала введите dotnet run

  3. В командной строке терминала введите 2

  4. Убедитесь, что отображаются следующие сообщения:

    We currently have 4 pets that need homes. We can manage 4 more.
    Do you want to enter info for another pet (y/n)
    
  5. В командной строке терминала введите n

  6. Убедитесь, что код завершает цикл ввода новых домашних животных при вводе "n".

    Если логика кода работает должным образом, вы увидите главное меню, отображаемое в терминале.

    Если код не выходит из цикла, когда ожидается, нажмите клавиши CTRL+C в терминале, чтобы принудительно завершить выполнение. Необходимо вручную пройтись по коду и отслеживать значения переменных критериев выхода. При необходимости обновите код, чтобы убедиться, что вы выходите из while цикла, когда пользователь вводит "n". Сохраните изменения, перестройте программу и выполните тест проверки, чтобы вернуться к этому моменту.

  7. В командной строке терминала введите 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)
    
  8. В командной строке терминала введите y

  9. Учтите, как 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).

    Имейте в виду этот анализ логики кода при продолжении тестирования приложения.

  10. Обратите внимание: панель терминала обновляется с таким же сообщением "еще одно домашнее животное?", но ваш код не отображает обновленный 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)
    
  11. В командной строке терминала введите y

    При вводе y второго раза petCount увеличивается до 7. Так petCount по-прежнему меньше, чем maxPets

  12. В командной строке терминала введите y

    При вводе y в третий раз petCount увеличивается до 8. Теперь petCount равно maxPets

  13. Убедитесь, что код завершает 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.

  14. В командной строке терминала нажмите клавишу ВВОД, чтобы продолжить выполнение приложения.

  15. Закройте приложение и закройте панель терминала.