Вправа – створення та перевірка циклу введення нових даних про домашніх тварин
У цій вправі ви розробляєте код, який контролює введення нових ourAnimals даних масиву. Ви обчислюєте початкові значення змінних керування циклом і будуєте цикл, який збирає вказані користувачем дані для тварин. Докладні завдання, виконані під час цієї вправи:
- Обчислення petCount: код запису, який обчислює кількість домашніх тварин у
ourAnimalsмасиві, який призначив дані. - Умовні повідомлення: написання коду для відображення результатів повідомлення, якщо
petCountменшеmaxPets. - Зовнішня петля: створіть структуру циклу, яка використовуватиметься для введення нових
ourAnimalsданих масиву. - Умови виходу: код запису, який обчислює умову виходу для циклу "Введіть нові дані масивуAnimals".
- Перевірка: виконайте перевірочні тести для коду, який ви розробляєте в цій вправі.
Важливий
Перед початком цієї вправи слід виконати попередню вправу в цьому модулі.
Підрахунок кількості домашніх тварин у масивіAnimals
У цьому завданні ви встановлюєте умови виходу для циклу введення даних і створюєте for цикл, який можна використовувати, щоб підрахувати кількість домашніх тварин, яким ourAnimals призначено дані.
Переконайтеся, що код Visual Studio відкрито, а файл Program.cs відображається в редакторі.
Знайдіть інструкцію
switch(menuSelection)та знайдітьcase "2":рядок коду.Знайдіть інструкцію
Console.WriteLine(), яка відображає повідомлення "очікується незабаром", а потім замініть його на пустий рядок коду.У пустому коді, який ви створили, щоб оголосити
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на вищому рівні. Пам'ятайте, що ваші змінні максимально вузькі та збільшують їхню область, коли це необхідно.У рядку коду під оголошеннями змінних, щоб створити цикл, який ітерує через тварин у
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 і введіть команду для створення програми.
Щоб відкрити вікно Інтегрувати термінал у поданні EXPLORER, клацніть правою кнопкою миші елемент Starter, а потім виберіть Відкрити в інтегрованому терміналі. Щоб відкрити панель "Інтегрований термінал", також можна скористатися меню Подання або Термінал .
Щоб створити програму, введіть
dotnet buildкоманду в командному рядку термінала.Виправте всі помилки збірки, про які ви бачите, перш ніж продовжити.
Примітка
Наразі ви можете ігнорувати попередження про
anotherPetпризначення, але ніколи не використовується. Ви додасте код, який використовуватиметьсяanotherPetпізніше в цій вправі.Якщо у вас виникли помилки збірки, пам'ятайте, що повідомлення про помилку збірки та попередження вказують, що таке проблема та де її можна знайти. Якщо ви оновите код, не забудьте зберегти зміни, перш ніж перебудуватися.
Закрийте панель терміналів.
Відображення вихідних повідомлень, якщо значення petCount менше максимального значенняPets
У цьому завданні ви перевіряєте, чи petCount це менше maxPets , і якщо воно є, ви відображаєте повідомлення для користувача.
У пустому рядку коду під
forствореним циклом, щоб побачити, чиpetCountmaxPetsменше значення, введіть такий код: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 і введіть команду для створення програми.
Виправте всі помилки збірки, про які ви бачите, перш ніж продовжити.
Знову ж таки, ви можете ігнорувати попередження про
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.Якщо очікуване повідомлення не відображається, перегляньте код, щоб визначити та вирішити цю проблему. Збережіть зміни, перебудуйте та запустіть програму ще раз. Перш ніж продовжити, переконайтеся, що код працює належним чином.
У командному рядку термінала натисніть клавішу Enter, щоб продовжити роботу програми.
Закрийте програму, а потім закрийте панель терміналів.
Створення структури циклу, яка використовуватиметься для введення нових даних масивуAnimals
У цьому завданні створюється while цикл, який продовжує ітерувати до тих пір, поки anotherPet воно дорівнює y і petCount менше maxPets.
У редакторі коду створіть пустий рядок коду під блоком
if (petCount < maxPets)коду.Щоб почати процес створення нового
whileциклу, введіть такий код:while (anotherPet == "y" && petCount < maxPets) { }У меню Файл код Visual Studio Code виберіть Зберегти.
Відкрийте панель "Інтегрований термінал" у коді Visual Studio і введіть команду для створення програми.
Зверніть увагу, що ви більше не отримуєте попередження про
anotherPetте, що не використовується.Якщо було повідомлено про помилки або попередження збірки, виправте неполадки, перш ніж продовжити.
Перевірка умови виходу для циклу нових домашніх тварин
У цьому завданні ви оновите while (anotherPet == "y" && petCount < maxPets) блок коду. Новий код збільшується petCount , а потім перевіряє, чи petCount менше maxPets. Якщо petCount це менше maxPets, ви запитаєте користувача, чи хочуть вони ввести інформацію для іншого вихованця, і переконайтеся, що відповідь або yn.
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 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":Знайдіть хвилинку, щоб переглянути код у циклі
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 і введіть команду для створення програми.
Виправте всі помилки збірки або попередження, про які ви бачите, перш ніж продовжити.
Перевірка роботи
У цьому завданні ви запускаєте нашу програму з інтегрованого терміналу та перевіряєте, чи працює логіка циклічного та розгалуження, яку ви створили, належним чином.
За потреби відкрийте інтегровану панель терміналів Коду Visual Studio.
У командному рядку термінала введіть 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збільшується щоразу,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 ).
- Цикл
Пам'ятайте про цей аналіз логіки коду, коли ви продовжите перевірку програми.
Зверніть увагу, що панель терміналів оновлюється з тим самим повідомленням "інша домашня тварина?", але код не відображає оновлений
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.У командному рядку термінала натисніть клавішу Enter, щоб продовжити роботу програми.
Закрийте програму, а потім закрийте панель терміналів.