Вправа – код запису для відображення всіх даних масивуAnimals

Завершено

У цій вправі ви пишете вкладену структуру циклічного циклу та блок коду виділення, який використовується для відображення відомостей про масив "Анімації". Докладні завдання, виконані під час цієї вправи:

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

Важливий

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

Створення циклу для ітерації за допомогою нашого масивуAnimals

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

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

  2. У блоці коду для інструкції з 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;
    
  3. Видаліть інструкцію, Console.WriteLine() яка використовується для відображення повідомлення "очікується незабаром", і залиште пустий код під рядком примітки // List all of our current pet information коду.

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

    Залиште повідомлення з текстом Press the Enter key to continue.

  4. Починаючи з пустого створеного рядка коду, почніть інструкцію for таким чином:

    for ()
    {
    }
    
  5. Зачекайте хвилинку, щоб розглянути, чого потрібно досягти за допомогою цієї 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

  6. Щоб указати значення for елемента керування циклу, оновіть код, як зазначено нижче.

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

    Як бачите, установивши для ініціалізатораint i = 0; вирівнювання з нульовим індексом масиву. Аналогічно, установивши для умови вирівнюванняi < maxPets; за першим виміром масиву. Нарешті, установивши для ітератораi++ значення елемента керування циклом 1 , щоб збільшити значення для кожної ітерації.

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

  8. У меню Файл код Visual Studio Code виберіть Зберегти.

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

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

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

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

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

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

Перевірка наявності даних про домашніх тварин і результат відображення

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

  1. Створіть пустий код у блоці for коду виписки, як виконайте наведені нижче дії.

    for (int i = 0; i < maxPets; i++)
    {
    
    }    
    
  2. Щоб створити інструкцію, if яка перевіряє наявність даних ідентифікатора домашньої тварини, оновіть код таким чином:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
        }
    }    
    
  3. Зачекайте хвилинку, щоб обміркувати, що обчислюється в цьому if положенні та чому.

    Спочатку розгляньте ліву сторону виразу: ourAnimals[i, 0]. Зверніть увагу, що змінна i елемента керування циклом використовується для визначення тварини, яка розглядається. Як ви пам'ятаєте, in 0[i, 0] відповідає характеристикі petID . Оскільки перший вимір масиву відповідає "кількості" тварини, ця сторона виразу гарантує, що код перевіряє значення, призначене petID кожній тварині в масиві.

    По-друге, розглянемо вибір оператора порівняння. Зверніть увагу, що використовується оператор ,, !=який не дорівнює. Вираз обчислюється щоразу true , коли значення, призначене ідентифікатору petID, ourAnimals[i, 0]не дорівнює значенню, указаному в правій частині формули.

    По-третє, розгляньте значення праворуч формули. Зверніть увагу, що використовується статичне значення "ID #: " рядка. Це стандартне значення, призначене petID під час створення зразка даних. Коли характеристики призначаються тварині petID , значення оновлюється та не буде дорівнювати стандартному значенню.

    Це повідомляє, що блок коду виписки if буде виконано, коли поточна тварина має визначені характеристики.

    Примітка

    Це чудовий приклад використання != . Вам байдуже, яке значення призначається, якщо petID це не стандартне значення.

  4. Щоб створити Console.WriteLine() метод, який відображає petID блок if коду оператора, оновіть код таким чином:

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

    Зверніть увагу, що елемент масиву можна використовувати як аргумент під час виклику методу WriteLine() .

  5. У меню Файл код Visual Studio Code виберіть Зберегти.

  6. Відкрийте панель "Інтегрований термінал" і введіть команду , щоб створити програму.

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

  8. У командному рядку термінала введіть команду для запуску програми.

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

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

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

    Відобразяться такі petID значення:

    ID #: d1
    ID #: d2
    ID #: c3
    ID #: c4
    Press the Enter key to continue.
    

    Ці ідентифікатори відповідають домашнім тваринам, яким призначено дані.

    Якщо під час вибору пункту меню 1 відображається інший вивід коду, перегляньте та оновіть код. Пам'ятайте, що потрібно зберегти файл Program.cs після внесення оновлень.

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

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

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

  1. У редакторі коду знайдіть у файлі Program.cs такі рядки коду:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
            Console.WriteLine(ourAnimals[i, 0]);
        }
    }    
    
  2. Щоб створити 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 . Намір полягає в тому, щоб внутрішня петля ітерувати через характеристики кожної тварини. Оскільки дані тварини зберігаються в багатовимірному масиві, доступ до характеристик тварин буде легко отримати.

  3. Знайдіть хвилинку, щоб переглянути введену інструкцію for .

    Зверніть увагу, що змінна елемента керування циклом має ім'я j. Коли ви вкладаєте for петлі, один звичайний підхід полягає в використанні i в зовнішньому циклі і j у внутрішньому циклі. Завдяки таким конвенціям іншим користувачам буде легше читати ваш код.

    Оскільки шість характеристик зберігаються для кожної тварини, то для ініціалізатора є int j = 0; і для стану .j < 6; Це поєднання ініціалізатора та умови відповідає потрібному діапазону індексу масиву . 0 - 5

  4. Щоб відобразити кожну характеристику домашньої тварини в окремому рядку, оновіть код таким інакше:

    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]);
            }
        }
    }    
    
  5. Поміркуйте над створеною вкладеною структурою та відображуваним виходом коду.

    Зверніть увагу, що значення, записане на консоль, ourAnimals[i, j]використовує змінні елемента керування циклом із зовнішніх і внутрішніх for циклів.

    Ви знаєте кожен із таких елементів:

    • Перший вимір масиву ourAnimals відповідає різним домашнім тваринам.
    • Другий вимір масиву ourAnimals відповідає характеристикам кожного вихованця.
    • Інструкція if запобігає запуску внутрішнього циклу, якщо немає даних про домашніх тварин, призначених поточній тварині.
    • Внутрішня петля завершує всі свої ітерації для кожної ітерації зовнішнього циклу.

    Тому ви знаєте, що характеристики кожної тварини будуть відображатися за призначенням.

  6. Щоб замінити повідомлення 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]);
            }
        }
    }    
    

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

  7. У меню Файл код Visual Studio Code виберіть Зберегти.

  8. Відкрийте область терміналів і створіть програму.

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

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

У цьому завданні ви запускаєте програму з інтегрованого терміналу та перевіряєте, чи отримано очікуваний результат вкладеної for комбінації та операторів if .

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

  2. У командному рядку термінала введіть dotnet run

  3. У командному рядку термінала введіть 1

  4. Переконайтеся, що дані домашньої тварини відображаються для чотирьох домашніх тварин, яким призначено дані.

    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 файл у кінцевій папці, радимо витратити час на виявлення та виправлення синтаксичні та логічні проблеми в коді.

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