Вправа – створення та перевірка циклу введення нових даних про домашніх тварин

Завершено

У цій вправі ви розробляєте код, який контролює введення нових ourAnimals даних масиву. Ви обчислюєте початкові значення змінних керування циклом і будуєте цикл, який збирає вказані користувачем дані для тварин. Докладні завдання, виконані під час цієї вправи:

  1. Обчислення petCount: код запису, який обчислює кількість домашніх тварин у ourAnimals масиві, який призначив дані.
  2. Умовні повідомлення: написання коду для відображення результатів повідомлення, якщо petCount менше maxPets.
  3. Зовнішня петля: створіть структуру циклу, яка використовуватиметься для введення нових ourAnimals даних масиву.
  4. Умови виходу: код запису, який обчислює умову виходу для циклу "Введіть нові дані масивуAnimals".
  5. Перевірка: виконайте перевірочні тести для коду, який ви розробляєте в цій вправі.

Важливий

Перед початком цієї вправи слід виконати попередню вправу в цьому модулі.

Підрахунок кількості домашніх тварин у масивіAnimals

У цьому завданні ви встановлюєте умови виходу для циклу введення даних і створюєте for цикл, який можна використовувати, щоб підрахувати кількість домашніх тварин, яким ourAnimals призначено дані.

  1. Переконайтеся, що код Visual Studio відкрито, а файл Program.cs відображається в редакторі.

  2. Знайдіть інструкцію switch(menuSelection) та знайдіть case "2": рядок коду.

  3. Знайдіть інструкцію Console.WriteLine() , яка відображає повідомлення "очікується незабаром", а потім замініть його на пустий рядок коду.

  4. У пустому коді, який ви створили, щоб оголосити anotherPet змінні та petCount введіть такий код:

    string anotherPet = "y";
    int petCount = 0;
    

    Ці дві змінні керують ітерацією while циклу, який використовується для введення нових даних про домашніх тварин. Ви ініціалізуєте обидві змінні як частину оголошення.

    • anotherPet ініціалізовано зі значенням y перед початком while циклу. Користувач отримає призначене значення або yn в циклі while .

    • petCount позначає кількість тварин із призначеними характеристиками домашньої тварини. Йому буде присвоєно обчислюване значення за межами циклу while , і його буде інкрементовано 1 всередині while циклу кожного разу, коли до масиву додається нова тварина ourAnimals .

    Важливий

    Обсяг змінних завжди має бути максимально вузьким. У програмі Contoso Pets можна використовувати область petCount на рівні програми, а не скопійувати case "2": до блоку коду. Більша область дасть змогу отримати доступ petCount звідусіль у програмі. Якщо petCount область була на рівні програми, можна призначити йому значення під час створення зразка даних і програмного керування його значенням у всій решті програми. Наприклад, якщо знайти домашню тварину та видалити домашню тварину з масиву ourAnimals , можна зменшити petCount1на . Питання полягає в тому, на якій рівні слід обмежити змінну, коли ви не впевнені, чи буде вона використовуватися в інших частинах програми? У цьому випадку спокусливо використовувати область petCount на рівні програми, навіть якщо ви не використовуєте її в іншому розташуванні. Зрештою, визначення області petCount на рівні програми гарантує, що він доступний, якщо ви вирішите використовувати його в іншому місці. Може бути, ви могли б обмежити інші змінні на рівні програми, а також. Таким чином, ваші змінні завжди знаходяться в області та доступні. Так чому б не області змінних на рівні програми, коли ви думаєте, що вони можуть бути використані пізніше в програмі? Визначення змінних на вищому рівні, ніж необхідно, може призвести до проблем. Підвищена область підвищує вимоги до ресурсів програми та може наражати вашу програму на непотрібні ризики для безпеки. Оскільки програми стають все більшими та складнішими, для них потрібно більше ресурсів. Телефони та комп'ютери виділяють пам'ять для цих ресурсів, коли вони в області. Оскільки ваші програми стають більш "реальними", вони стають більш доступними. Програми часто доступні з хмари або інших програм. Ускладнюючи ці проблеми, програми часто залишаються запущеними, коли вони не використовуються. Важливо тримати під контролем вимог до ресурсів програми та забезпечити якомога менший рівень безпеки. Хоча сьогоднішні операційні системи виконують велику роботу з керування ресурсами та забезпеченням програм, радимо зберігати змінні на рівні, де вони насправді потрібні. У програмі Contoso Pets, якщо ви вирішите використовувати 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 і введіть команду для створення програми.

    Щоб відкрити вікно Інтегрувати термінал у поданні EXPLORER, клацніть правою кнопкою миші елемент Starter, а потім виберіть Відкрити в інтегрованому терміналі. Щоб відкрити панель "Інтегрований термінал", також можна скористатися меню Подання або Термінал .

    Щоб створити програму, введіть dotnet build команду в командному рядку термінала.

  11. Виправте всі помилки збірки, про які ви бачите, перш ніж продовжити.

    Примітка

    Наразі ви можете ігнорувати попередження про anotherPet призначення, але ніколи не використовується. Ви додасте код, який використовуватиметься anotherPet пізніше в цій вправі.

    Якщо у вас виникли помилки збірки, пам'ятайте, що повідомлення про помилку збірки та попередження вказують, що таке проблема та де її можна знайти. Якщо ви оновите код, не забудьте зберегти зміни, перш ніж перебудуватися.

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

Відображення вихідних повідомлень, якщо значення petCount менше максимального значенняPets

У цьому завданні ви перевіряєте, чи petCount це менше maxPets , і якщо воно є, ви відображаєте повідомлення для користувача.

  1. У пустому рядку коду під for створеним циклом, щоб побачити, чи petCountmaxPetsменше значення, введіть такий код:

    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 і введіть команду для створення програми.

  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. У командному рядку термінала натисніть клавішу Enter, щоб продовжити роботу програми.

  11. Закрийте програму, а потім закрийте панель терміналів.

Створення структури циклу, яка використовуватиметься для введення нових даних масивуAnimals

У цьому завданні створюється while цикл, який продовжує ітерувати до тих пір, поки anotherPet воно дорівнює y і petCount менше maxPets.

  1. У редакторі коду створіть пустий рядок коду під блоком if (petCount < maxPets) коду.

  2. Щоб почати процес створення нового while циклу, введіть такий код:

    while (anotherPet == "y" && petCount < maxPets)
    {
    }
    
  3. У меню Файл код Visual Studio Code виберіть Зберегти.

  4. Відкрийте панель "Інтегрований термінал" у коді Visual Studio і введіть команду для створення програми.

  5. Зверніть увагу, що ви більше не отримуєте попередження про anotherPet те, що не використовується.

    Якщо було повідомлено про помилки або попередження збірки, виправте неполадки, перш ніж продовжити.

Перевірка умови виходу для циклу нових домашніх тварин

У цьому завданні ви оновите while (anotherPet == "y" && petCount < maxPets) блок коду. Новий код збільшується petCount , а потім перевіряє, чи petCount менше maxPets. Якщо petCount це менше maxPets, ви запитаєте користувача, чи хочуть вони ввести інформацію для іншого вихованця, і переконайтеся, що відповідь або yn. 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 Pets досягла своєї доступності, оновіть код таким чином:

    
        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 і введіть команду для створення програми.

  13. Виправте всі помилки збірки або попередження, про які ви бачите, перш ніж продовжити.

Перевірка роботи

У цьому завданні ви запускаєте нашу програму з інтегрованого терміналу та перевіряєте, чи працює логіка циклічного та розгалуження, яку ви створили, належним чином.

  1. За потреби відкрийте інтегровану панель терміналів Коду Visual Studio.

  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 збільшується щоразу, while коли цикл ітератив.

    • Ви знаєте, що значення, яке призначається 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. У командному рядку термінала натисніть клавішу Enter, щоб продовжити роботу програми.

  15. Закрийте програму, а потім закрийте панель терміналів.