Oefening: code schrijven om al onzeAnimals-matrixgegevens weer te geven

Voltooid

In deze oefening schrijft u de geneste lusstructuur en het selectiecodeblok dat wordt gebruikt om de matrixgegevens van ourAnimals weer te geven. De gedetailleerde taken die u tijdens deze oefening hebt voltooid, zijn:

  1. Buitenlus: bouw de buitenste lus die door de dieren in de ourAnimals-matrix doorloopt.
  2. Gegevenscontrole: schrijf code die controleert op bestaande huisdiergegevens en geeft de huisdier-id weer als er gegevens voor een huisdier bestaan.
  3. Binnenste lus: bouw een binnenste lus die alle huisdierkenmerken voor huisdieren weergeeft waaraan gegevens zijn toegewezen.
  4. Verificatietest: voer verificatietests uit voor de code die u in deze oefening ontwikkelt.

Belangrijk

U moet de vorige oefening in deze module voltooien voordat u deze oefening start.

Een lus bouwen om de matrix OurAnimals te doorlopen

In deze taak maakt u de buitenste for lus die wordt gebruikt om de dieren in de ourAnimals matrix te herhalen. U onderzoekt de relatie tussen de dimensies van uw matrix en de parameters van uw for lus. U kunt ook rekening houden met de verschillen tussen het gebruik van for instructies en foreach instructies bij het werken met multidimensionale matrices.

  1. Zorg ervoor dat Visual Studio Code is geopend en dat uw Program.cs-bestand zichtbaar is in de editor.

  2. Zoek in het codeblok voor de switch(menuSelection) selectie-instructie de volgende coderegels:

    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. Verwijder de Console.WriteLine() instructie die wordt gebruikt om het bericht 'binnenkort beschikbaar' weer te geven en laat een lege coderegel achter onder de commentaarregel van de // List all of our current pet information code.

    Het feedbackbericht is niet nodig omdat u de inhoud van de ourAnimals matrix weergeeft. Wanneer u de code ontwikkelt die overeenkomt met de andere menuselecties, worden deze feedbackberichten ook bijgewerkt.

    Laat het bericht achter met de tekst Press the Enter key to continue.

  4. Begin als volgt vanaf de lege coderegel die u hebt gemaakt for :

    for ()
    {
    }
    
  5. Neem even de tijd om na te denken over wat u met deze for instructie moet bereiken.

    for Een instructie heeft drie onderdelen die bepalen hoe iteraties worden geïmplementeerd: de for initializer, de for condition en de for iterator. De waarden die zijn toegewezen aan de voor initialisatiefunctie, voor voorwaarde en voor iterator , zijn gebaseerd op wat u met de for instructie moet bereiken.

    In dit geval wordt de for lus gebruikt om de ourAnimals matrix te doorlopen. U weet dat matrices nul geïndexeerd zijn, wat betekent dat een matrix met n elementen wordt geïndexeerd van 0 naar n-1. U hebt het voor initialisatieprogramma, voor voorwaarde en voor iterator nodig om de dimensies van de matrix te vinden. In dit geval wilt u dat de for lus begint bij 0, oplopend 1op en eindigt op maxPets-1.

    Uw ourAnimals matrix wordt als volgt gedeclareerd: string[,] ourAnimals = new string[maxPets, 6];. U weet dat de waarde die is toegewezen maxPets , is 8. In deze declaratie maxPets geeft u het aantal elementen in de eerste dimensie van de matrix op, niet het op nul gebaseerde indexnummer dat u gebruikt om naar elementen in de matrix te verwijzen. maxPets = 8Daarom variëren de matrixindexnummers van 0 tot 7.

  6. Als u de controlewaarde van uw for lus wilt opgeven, werkt u de code als volgt bij:

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

    Zoals u ziet, kunt u de initialisatiefunctieint i = 0; zo instellen dat deze overeenkomt met de matrixindex op basis van nul. Op dezelfde manier kunt u de voorwaardei < maxPets; zo instellen dat deze overeenkomt met de eerste dimensie van de matrix. Als u ten slotte de iterator instelt, i++ wordt de waarde 1 van het lusbesturingselement voor elke iteratie verhoogd.

  7. Neem even de tijd om na te denken over de keuze tussen een for instructie en een foreach instructie bij het doorlopen van de matrix ourAnimals.

    Het doel is om elk dier in de ourAnimals-matrix één voor één te doorlopen. Waarom zou u dus foreach geen lus gebruiken? U weet immers dat de foreach instructie is ontworpen voor gevallen waarin u elk item in een matrix met items wilt herhalen.

    De reden waarom u in deze situatie geen lus gebruikt foreach , is omdat de ourAnimals matrix multidimensionale matrix is. Omdat ourAnimals dit een multidimensionale tekenreeksmatrix is, is elk element in ourAnimals een afzonderlijk item van het type tekenreeks. Als u een foreach lus hebt gebruikt om door te gaan ourAnimals, herkent de foreach tekenreeks als een afzonderlijk item in een lijst met 48 tekenreeksitems (8 x 6 = 48). De foreach instructie zou de twee matrixdimensies niet afzonderlijk verwerken. Met andere woorden, een foreach lus herkent 8 geen rijen met tekenreekselementen, waarbij elke rij een kolom 6 met items bevat. Omdat u met één dier tegelijk wilt werken en alle zes dierkenmerken tijdens één iteratie wilt verwerken, is een foreach instructie niet de juiste keuze.

    Als de ourAnimals matrix echter een gelabelde matrix is die is geconfigureerd als een matrix met tekenreeksmatrices, kunt u een foreach instructie gebruiken. In dit geval maakt u een foreach voor een buitenste lus en een tweede foreach voor een binnenste lus. De buitenste lus zou de elementen van de tekenreeksmatrix in de gelabelde matrix herhalen. De tekenreeksmatrices zijn de 'rijen' in de tweedimensionale matrix. De binnenste lus zou de elementen 'tekenreeks' in de tekenreeksmatrices herhalen. De tekenreekselementen in de tekenreeksmatrices zijn de kolommen in de tweedimensionale matrix.

    In het volgende codevoorbeeld wordt de benadering van de onregelmatige matrix gedemonstreerd.

    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();
    }
    

    Voor de toepassing Contoso Pets is het waarschijnlijk eenvoudiger om een multidimensionale tekenreeksmatrix en geneste lussen te gebruiken in plaats van een gelabelde for matrix en geneste foreach lussen. Nu u ziet hoe elke optie werkt, kunt u uw eigen keuze maken in toekomstige coderingsprojecten.

  8. Selecteer Opslaan in het menu Visual Studio Code File.

  9. Open het deelvenster Integrated Terminal in Visual Studio Code en voer de opdracht in om uw programma te bouwen.

    Als u de integratieterminal wilt openen vanuit de VERKENNER-weergave, klikt u met de rechtermuisknop op Starter en selecteert u Openen in geïntegreerde terminal. U kunt ook het menu Beeld of Terminal gebruiken om het deelvenster Geïntegreerde terminal te openen.

    Voer de opdracht uit de dotnet build Terminal-opdrachtprompt in om uw programma te bouwen.

  10. Los eventuele buildfouten of waarschuwingen op die worden gerapporteerd voordat u doorgaat.

    Houd er rekening mee dat de build-fout- en waarschuwingsberichten u vertellen wat het probleem is en waar u het kunt vinden. Bij het oplossen van problemen kunt u het beste beginnen met de problemen die zich boven aan uw code voordoen en omlaag werken.

  11. Sluit het venster Terminal.

Controleren op bestaande huisdiergegevens en resultaat weergeven

In deze taak gebruikt u een if instructie om elk huisdier te vinden in de ourAnimals matrix waaraan gegevens over huisdierkenmerken zijn toegewezen. Wanneer een huisdier met toegewezen gegevens wordt gevonden, geeft u de petID weer. Wanneer er geen gegevens zijn toegewezen, wordt er niets weergegeven. U voert de code uit om te controleren of uw for instructies if correct werken.

  1. Maak als volgt een lege coderegel in uw for instructiecodeblok:

    for (int i = 0; i < maxPets; i++)
    {
    
    }    
    
  2. Als u een if instructie wilt maken die controleert op gegevens over huisdier-id's, werkt u uw code als volgt bij:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
        }
    }    
    
  3. Neem even de tijd om na te gaan wat deze if instructie evalueert en waarom.

    Kijk eerst naar de linkerkant van de expressie: ourAnimals[i, 0]. U ziet dat de lusbesturingsvariabele i wordt gebruikt om het dier op te geven dat wordt onderzocht. Zoals u zich misschien herinnert, komt de 0 in [i, 0] overeen met het petID kenmerk. Omdat de eerste dimensie van de matrix overeenkomt met het 'getal' van het dier, zorgt deze kant van de expressie ervoor dat de code de waarde controleert die petID is toegewezen aan elk dier in de matrix.

    Overweeg ten tweede de keuze van de vergelijkingsoperator. U ziet dat de niet-gelijke operator, !=wordt gebruikt. De expressie evalueert als true wanneer de waarde die is toegewezen aan petID, ourAnimals[i, 0]niet gelijk is aan de waarde die aan de rechterkant van de vergelijking wordt vermeld.

    Kijk ten derde naar de waarde aan de rechterkant van de vergelijking. U ziet dat er een statische tekenreekswaarde van "ID #: " wordt gebruikt. Dit is de standaardwaarde die is toegewezen petID wanneer de voorbeeldgegevens worden gegenereerd. Wanneer kenmerken worden toegewezen aan een dier, wordt de petID waarde bijgewerkt en is deze niet gelijk aan de standaardwaarde.

    Hiermee wordt aangegeven dat het codeblok van if de instructie wordt uitgevoerd wanneer het huidige dier kenmerken heeft gedefinieerd.

    Opmerking

    Dit is een goed voorbeeld voor wanneer != moet worden gebruikt. Het maakt u niet uit aan welke waarde is toegewezen petID zolang dit niet de standaardwaarde is.

  4. Als u een Console.WriteLine() methode wilt maken waarmee het codeblok van de petIDif instructie wordt weergegeven, werkt u de code als volgt bij:

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

    U ziet dat een matrixelement kan worden gebruikt als argument bij het aanroepen van de WriteLine() methode.

  5. Selecteer Opslaan in het menu Visual Studio Code File.

  6. Open het deelvenster Geïntegreerde terminal en voer de opdracht in om uw programma te bouwen.

  7. Los eventuele buildfouten of waarschuwingen op die worden gerapporteerd voordat u doorgaat.

  8. Voer bij de Terminal-opdrachtprompt de opdracht in om het programma uit te voeren.

    Voer de dotnet run opdracht in de Terminal-opdrachtprompt in om de programmacode uit te voeren.

    Als uw code een runtimefout genereert, lost u de fouten op, slaat u de updates op en start u de toepassing opnieuw.

  9. Voer bij de Terminal-opdrachtprompt 1 in om te controleren of uw nieuwe codelogica werkt zoals verwacht

    De volgende petID waarden worden weergegeven:

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

    Deze id's komen overeen met de huisdieren die gegevens hebben toegewezen.

    Als uw code andere uitvoer weergeeft wanneer u menuoptie 1 selecteert, controleert en werkt u de code bij. Houd er rekening mee dat u het Program.cs-bestand moet opslaan nadat u updates hebt uitgevoerd.

  10. Sluit de toepassing en sluit vervolgens het terminalpaneel.

Alle huisdierkenmerken voor huisdieren weergeven met gegevens die zijn toegewezen

In deze taak maakt u een for lus in het codeblok van de if instructie dat wordt gebruikt om alle kenmerken van het huidige huisdier weer te geven.

  1. Zoek in de code-editor de volgende coderegels in uw Program.cs-bestand:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
            Console.WriteLine(ourAnimals[i, 0]);
        }
    }    
    
  2. Als u de for lus wilt maken die door de kenmerken van elk huisdier wordt herhaald, werkt u uw code als volgt bij:

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

    U ziet dat u nu een tweede for lus hebt die 'genest' is binnen het codeblok van de eerste for lus. Zoals u weet, doorloopt de buitenste lus de dieren in de ourAnimals matrix. De bedoeling is dat de binnenste lus door de kenmerken van elk dier wordt herhaald. Omdat de dierlijke gegevens worden opgeslagen in een multidimensionale matrix, zijn ze gemakkelijk toegankelijk voor dierenkenmerken.

  3. Neem een minuut de tijd om de for verklaring die u hebt ingevoerd te bekijken.

    U ziet dat de lusbesturingsvariabele de naam jheeft. Wanneer u lussen nest for , is een conventionele benadering om te gebruiken i in de buitenste lus en j in de binnenste lus. Door deze conventies te volgen, is het voor anderen gemakkelijker om uw code te lezen.

    Aangezien er zes kenmerken voor elk dier worden opgeslagen, is int j = 0; het voor initialisatie en de voorvoorwaarde .j < 6; Deze combinatie van initialisatie en voorwaarde komt overeen met het matrixindexbereik dat u nodig hebt, 0 - 5.

  4. Als u elk kenmerk van een huisdier op een afzonderlijke regel wilt weergeven, werkt u uw code als volgt bij:

    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. Neem even de tijd om rekening te houden met de geneste structuur die u hebt gemaakt en de weergegeven uitvoer die door uw code wordt geproduceerd.

    U ziet dat de waarde die naar de console is geschreven, ourAnimals[i, j]gebruikmaakt van de lusbesturingsvariabelen van zowel de buitenste als de binnenste for lussen.

    U kent elk van de volgende items:

    • De eerste dimensie van de ourAnimals matrix komt overeen met de verschillende huisdieren.
    • De tweede dimensie van de ourAnimals matrix komt overeen met de kenmerken van elk huisdier.
    • De if instructie voorkomt dat de binnenste lus wordt uitgevoerd wanneer er geen huisdiergegevens zijn toegewezen aan het huidige huisdier.
    • De binnenste lus voltooit alle iteraties voor elke iteratie van de buitenste lus.

    Daarom weet u dat de kenmerken van elk dier worden weergegeven zoals bedoeld.

  6. Als u het petID-bericht wilt vervangen door een leeg WriteLine()bericht, werkt u de code als volgt bij:

    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]);
            }
        }
    }    
    

    Deze laatste update maakt het gemakkelijker om de scheiding tussen huisdieren te zien wanneer uw uitvoer wordt weergegeven in de console.

  7. Selecteer Opslaan in het menu Visual Studio Code File.

  8. Open een terminalvenster en bouw het programma.

  9. Los eventuele buildfouten of waarschuwingen op die worden gerapporteerd voordat u doorgaat.

Controleer uw werk

In deze taak voert u uw toepassing uit vanuit de geïntegreerde terminal en controleert u of uw geneste combinatie van for en if instructies het verwachte resultaat opleveren.

  1. Open zo nodig het geïntegreerde terminalpaneel van Visual Studio Code.

  2. Voer bij de Terminal-opdrachtprompt dotnet run in.

  3. Voer bij de terminalopdrachtprompt 1 in

  4. Controleer of de huisdiergegevens worden weergegeven voor de vier huisdieren waaraan gegevens zijn toegewezen.

    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.
    

    Opmerking

    Als u de verwachte resultaten niet ziet, controleert u of u het bijgewerkte Program.cs-bestand hebt opgeslagen. Als u de verwachte resultaten niet ziet en u het probleem niet kunt identificeren, kunt u de Program.cs code controleren in de map Definitief. De uiteindelijke map wordt opgenomen als onderdeel van het downloaden dat u tijdens de installatie hebt voltooid. U wordt aangeraden tijd te besteden aan het identificeren en oplossen van syntaxis- en logicaproblemen in uw code voordat u het Program.cs bestand in de map Definitief controleert.

  5. Sluit de toepassing en sluit vervolgens het terminalpaneel.