Вправа – код запису для відображення всіх даних масивуAnimals
У цій вправі ви пишете вкладену структуру циклічного циклу та блок коду виділення, який використовується для відображення відомостей про масив "Анімації". Докладні завдання, виконані під час цієї вправи:
- Зовнішня петля: побудувати зовнішню петлю, яка ітеративна через тварин в нашому масивіAnimals.
- Перевірка даних: код запису, який перевіряє наявність даних про домашніх тварин і відображає ідентифікатор домашньої тварини, якщо дані існують для домашньої тварини.
- Внутрішня петля: побудувати внутрішній цикл, який відображає всі характеристики домашньої тварини з даними, призначеними.
- Перевірка: виконайте перевірку тестів на код, який ви розробляєте в цій вправі.
Важливий
Перед початком цієї вправи слід виконати попередню вправу в цьому модулі.
Створення циклу для ітерації за допомогою нашого масивуAnimals
У цьому завданні ви створюєте зовнішню for петлю, яка використовується для ітерації через тварин у масиві ourAnimals . Ви перевіряєте зв'язок між вимірами масиву та параметрами циклу for . Ви також вважаєте відмінності між використанням for інструкцій і foreach операторів під час роботи з багатовимірними масивами.
Переконайтеся, що код Visual Studio відкрито, а файл Program.cs відображається в редакторі.
У блоці коду для інструкції з
switch(menuSelection)вибору знайдіть такі рядки коду:case "1": // List all of our current pet information Console.WriteLine("this app feature is coming soon - please check back to see progress."); Console.WriteLine("Press the Enter key to continue."); readResult = Console.ReadLine(); break;Видаліть інструкцію,
Console.WriteLine()яка використовується для відображення повідомлення "очікується незабаром", і залиште пустий код під рядком примітки// List all of our current pet informationкоду.Повідомлення для відгуків не знадобиться, оскільки вміст масиву
ourAnimalsвідображатиметься. Під час розробки коду, який відповідає іншим вибраним меню, ці повідомлення про відгуки також оновлюватимуться.Залиште повідомлення з текстом
Press the Enter key to continue.Починаючи з пустого створеного рядка коду, почніть інструкцію
forтаким чином:for () { }Зачекайте хвилинку, щоб розглянути, чого потрібно досягти за допомогою цієї
forзаяви.Нагадаємо, що
forінструкція містить три частини, які керують тим, як вона впроваджує ітерації: для ініціалізатора; умова та ітератор. Значення, призначені ініціалізатору, умові та ітератору , залежать від того, чого потрібно досягти з інструкцієюfor.У цьому випадку
forцикл використовується для ітерації черезourAnimalsмасив. Ви знаєте, що масиви проіндексовано нульово, а це означає, що масив зnелементами індексується від0доn-1. Вам знадобиться ініціалізатор, умова та ітератор , щоб він відповідав розмірам масиву. У цьому випадку потрібноfor, щоб цикл почався з0, крок за1, і закінчується наmaxPets-1.Ваш
ourAnimalsмасив одекларовано так:string[,] ourAnimals = new string[maxPets, 6];. Ви знаєте, що призначеноmaxPets8значення . У цій деклараціїmaxPetsвказується кількість елементів у першому вимірі масиву, а не номер індексу на основі нуля, який використовується для посилання на елементи масиву. Таким чином, хочаmaxPets = 8, номери індексу масиву варіюються від0.7Щоб указати значення
forелемента керування циклу, оновіть код, як зазначено нижче.for (int i = 0; i < maxPets; i++) { }Як бачите, установивши для ініціалізатора
int i = 0;вирівнювання з нульовим індексом масиву. Аналогічно, установивши для умови вирівнюванняi < maxPets;за першим виміром масиву. Нарешті, установивши для ітератораi++значення елемента керування циклом1, щоб збільшити значення для кожної ітерації.Візьміть хвилинку, щоб розглянути вибір між інструкцією
forта інструкцієюforeachпід час ітерації через масивAnimals.Мета полягає в тому, щоб ітерувати через кожну тварину в нашому масивіAnimals по одному. Так чому б не використовувати
foreachцикл? Зрештою, ви знаєте, щоforeachінструкція призначена для випадків, коли потрібно ітерувати кожний елемент у масиві елементів.Причина, чому ви не використовуєте
foreachцикл у цій ситуації, полягає в тому, щоourAnimalsмасив є багатовимірним масивом. ОскількиourAnimalsце масив багатовимірного рядка, кожен елемент, що міститься вourAnimalsній, є окремим елементом рядка типу. Якщо ви використовувалиforeachцикл для ітерації черезourAnimals,foreachкожен рядок буде розпізнавати як окремий елемент у списку 48 рядкових елементів (8 x 6 = 48). Операторforeachне буде обробляти два виміри масиву окремо. Іншими словами,foreachцикл не розпізнає8рядки елементів рядка, де кожен рядок містить стовпець6елементів. Оскільки ви хочете працювати з однією твариною одночасно і обробляти всі шість характеристик тварин під час однієї ітерації,foreachзаява не є правильним вибором.Однак, якщо
ourAnimalsмасив був нерівним масивом, настроєним як масив масиву масивів рядків, можна використатиforeachоператор. У цьому випадку ви створитеforeachдля зовнішньої петлі і другийforeachдля внутрішньої петлі. Зовнішня петля буде ітерувати через "масив рядків" елементів у нерівному масиві. Масиви рядків – це "рядки" у двовимірному масиві. Внутрішній цикл ітерується через елементи рядка, які містяться в масивах рядків. Елементи рядка в масивах рядків – це "стовпці" у двовимірному масиві.Наведений нижче зразок коду демонструє нерівний підхід до масиву.
string[][] jaggedArray = new string[][] { new string[] { "one1", "two1", "three1", "four1", "five1", "six1" }, new string[] { "one2", "two2", "three2", "four2", "five2", "six2" }, new string[] { "one3", "two3", "three3", "four3", "five3", "six3" }, new string[] { "one4", "two4", "three4", "four4", "five4", "six4" }, new string[] { "one5", "two5", "three5", "four5", "five5", "six5" }, new string[] { "one6", "two6", "three6", "four6", "five6", "six6" }, new string[] { "one7", "two7", "three7", "four7", "five7", "six7" }, new string[] { "one8", "two8", "three8", "four8", "five8", "six8" } }; foreach (string[] array in jaggedArray) { foreach (string value in array) { Console.WriteLine(value); } Console.WriteLine(); }Для програми "Домашні тварини Contoso", можливо, простіше використовувати багатовимірний масив рядків і вкладені
forцикли, а не нерівний масив і вкладеніforeachцикли. Тепер, коли ви побачите, як працює кожен варіант, ви можете зробити свій власний вибір у майбутніх проектах кодування.У меню Файл код Visual Studio Code виберіть Зберегти.
Відкрийте панель "Інтегрований термінал" у коді Visual Studio і введіть команду для створення програми.
Щоб відкрити вікно Інтегрувати термінал у поданні EXPLORER, клацніть правою кнопкою миші елемент Starter, а потім виберіть Відкрити в інтегрованому терміналі. Щоб відкрити панель "Інтегрований термінал", також можна скористатися меню Подання або Термінал .
Щоб створити програму, введіть
dotnet buildкоманду в командному рядку термінала.Виправте всі помилки або попередження про збірку, про які ви бачите, перш ніж продовжити.
Пам'ятайте, що повідомлення про помилку збірки та попередження вказують, що таке проблема та де її можна знайти. Під час вирішення проблем краще почати з проблем, які виникають у верхній частині коду, і працювати вниз.
Закрийте панель терміналів.
Перевірка наявності даних про домашніх тварин і результат відображення
У цьому завданні ви використовуєте інструкцію if , щоб знайти кожну домашню тварину ourAnimals в масиві, який призначено дані характеристик домашніх тварин. Коли домашня тварина з призначеними даними знайдена, відображається ідентифікатор petID. Якщо дані не призначено, нічого не відображається. Запустіть код, щоб переконатися, що ваші for та if оператори працюють належним чином.
Створіть пустий код у блоці
forкоду виписки, як виконайте наведені нижче дії.for (int i = 0; i < maxPets; i++) { }Щоб створити інструкцію,
ifяка перевіряє наявність даних ідентифікатора домашньої тварини, оновіть код таким чином:for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { } }Зачекайте хвилинку, щоб обміркувати, що обчислюється в цьому
ifположенні та чому.Спочатку розгляньте ліву сторону виразу:
ourAnimals[i, 0]. Зверніть увагу, що зміннаiелемента керування циклом використовується для визначення тварини, яка розглядається. Як ви пам'ятаєте, in0[i, 0]відповідає характеристикіpetID. Оскільки перший вимір масиву відповідає "кількості" тварини, ця сторона виразу гарантує, що код перевіряє значення, призначенеpetIDкожній тварині в масиві.По-друге, розглянемо вибір оператора порівняння. Зверніть увагу, що використовується оператор ,,
!=який не дорівнює. Вираз обчислюється щоразуtrue, коли значення, призначене ідентифікатору petID,ourAnimals[i, 0]не дорівнює значенню, указаному в правій частині формули.По-третє, розгляньте значення праворуч формули. Зверніть увагу, що використовується статичне значення
"ID #: "рядка. Це стандартне значення, призначенеpetIDпід час створення зразка даних. Коли характеристики призначаються твариніpetID, значення оновлюється та не буде дорівнювати стандартному значенню.Це повідомляє, що блок коду виписки
ifбуде виконано, коли поточна тварина має визначені характеристики.Примітка
Це чудовий приклад використання
!=. Вам байдуже, яке значення призначається, якщоpetIDце не стандартне значення.Щоб створити
Console.WriteLine()метод, який відображаєpetIDблокifкоду оператора, оновіть код таким чином:for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { Console.WriteLine(ourAnimals[i, 0]); } }Зверніть увагу, що елемент масиву можна використовувати як аргумент під час виклику методу
WriteLine().У меню Файл код Visual Studio Code виберіть Зберегти.
Відкрийте панель "Інтегрований термінал" і введіть команду , щоб створити програму.
Виправте всі помилки або попередження про збірку, про які ви бачите, перш ніж продовжити.
У командному рядку термінала введіть команду для запуску програми.
Введіть команду в
dotnet runкомандному рядку термінала, щоб запустити код програми.Якщо код створює помилку середовища виконання, виправте помилки, збережіть оновлення та перезапустіть програму.
У командному рядку термінала, щоб переконатися, що нова логіка коду працює належним чином, введіть 1
Відобразяться такі
petIDзначення:ID #: d1 ID #: d2 ID #: c3 ID #: c4 Press the Enter key to continue.Ці ідентифікатори відповідають домашнім тваринам, яким призначено дані.
Якщо під час вибору пункту меню 1 відображається інший вивід коду, перегляньте та оновіть код. Пам'ятайте, що потрібно зберегти файл Program.cs після внесення оновлень.
Закрийте програму, а потім закрийте панель терміналів.
Відображення всіх характеристик домашніх тварин для домашніх тварин із призначеними даними
У цьому завданні створюється for цикл у блоці if коду оператора, який використовується для відображення всіх характеристик поточного вихованця.
У редакторі коду знайдіть у файлі Program.cs такі рядки коду:
for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { Console.WriteLine(ourAnimals[i, 0]); } }Щоб створити
forцикл, який ітеруватиме характеристики кожного вихованця, оновіть код таким чином:for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { Console.WriteLine(ourAnimals[i, 0]); for (int j = 0; j < 6; j++) { } } }Зверніть увагу, що тепер у вас є другий
forцикл, який "вкладений" всередині блоку коду першогоforциклу. Як відомо, зовнішня петля ітеративна крізь тварин в масивіourAnimals. Намір полягає в тому, щоб внутрішня петля ітерувати через характеристики кожної тварини. Оскільки дані тварини зберігаються в багатовимірному масиві, доступ до характеристик тварин буде легко отримати.Знайдіть хвилинку, щоб переглянути введену інструкцію
for.Зверніть увагу, що змінна елемента керування циклом має ім'я
j. Коли ви вкладаєтеforпетлі, один звичайний підхід полягає в використанніiв зовнішньому циклі іjу внутрішньому циклі. Завдяки таким конвенціям іншим користувачам буде легше читати ваш код.Оскільки шість характеристик зберігаються для кожної тварини, то для ініціалізатора є
int j = 0;і для стану .j < 6;Це поєднання ініціалізатора та умови відповідає потрібному діапазону індексу масиву .0-5Щоб відобразити кожну характеристику домашньої тварини в окремому рядку, оновіть код таким інакше:
for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { Console.WriteLine(ourAnimals[i, 0]); for (int j = 0; j < 6; j++) { Console.WriteLine(ourAnimals[i, j]); } } }Поміркуйте над створеною вкладеною структурою та відображуваним виходом коду.
Зверніть увагу, що значення, записане на консоль,
ourAnimals[i, j]використовує змінні елемента керування циклом із зовнішніх і внутрішніхforциклів.Ви знаєте кожен із таких елементів:
- Перший вимір масиву
ourAnimalsвідповідає різним домашнім тваринам. - Другий вимір масиву
ourAnimalsвідповідає характеристикам кожного вихованця. - Інструкція
ifзапобігає запуску внутрішнього циклу, якщо немає даних про домашніх тварин, призначених поточній тварині. - Внутрішня петля завершує всі свої ітерації для кожної ітерації зовнішнього циклу.
Тому ви знаєте, що характеристики кожної тварини будуть відображатися за призначенням.
- Перший вимір масиву
Щоб замінити повідомлення petID на пусте
WriteLine(), оновіть код таким інакше:for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { Console.WriteLine(); for (int j = 0; j < 6; j++) { Console.WriteLine(ourAnimals[i, j]); } } }Це останнє оновлення спрощає відображення поділу між домашніми тваринами, коли вивід відображається на консолі.
У меню Файл код Visual Studio Code виберіть Зберегти.
Відкрийте область терміналів і створіть програму.
Виправте всі помилки або попередження про збірку, про які ви бачите, перш ніж продовжити.
Перевірка роботи
У цьому завданні ви запускаєте програму з інтегрованого терміналу та перевіряєте, чи отримано очікуваний результат вкладеної for комбінації та операторів if .
За потреби відкрийте інтегровану панель терміналів Коду Visual Studio.
У командному рядку термінала введіть dotnet run
У командному рядку термінала введіть 1
Переконайтеся, що дані домашньої тварини відображаються для чотирьох домашніх тварин, яким призначено дані.
ID #: d1 Species: dog Age: 2 Nickname: lola Physical description: medium sized cream colored female golden retriever weighing about 65 pounds. housebroken. Personality: loves to have her belly rubbed and likes to chase her tail. gives lots of kisses. ID #: d2 Species: dog Age: 9 Nickname: loki Physical description: large reddish-brown male golden retriever weighing about 85 pounds. housebroken. Personality: loves to have his ears rubbed when he greets you at the door, or at any time! loves to lean-in and give doggy hugs. ID #: c3 Species: cat Age: 1 Nickname: Puss Physical description: small white female weighing about 8 pounds. litter box trained. Personality: friendly ID #: c4 Species: cat Age: ? Nickname: Physical description: Personality: Press the Enter key to continue.Примітка
Якщо очікувані результати не відображаються, переконайтеся, що ви зберегли оновлений файл Program.cs. Якщо ви не бачите очікуваних результатів і не можете визначити проблему, перевірте код Program.cs в папці Final. Кінцева папка входить до складу завантаження, яке ви завершили під час інсталяції. Перш ніж перевіряти Program.cs файл у кінцевій папці, радимо витратити час на виявлення та виправлення синтаксичні та логічні проблеми в коді.
Закрийте програму, а потім закрийте панель терміналів.