Övning – Skriv kod för att visa all data i vår 'ourAnimals'-array

Fullbordad

I den här övningen skriver du den kapslade loopstrukturen och markeringskodblocket som används för att visa matrisinformationen för ourAnimals. De detaljerade uppgifter som du utför under den här övningen är:

  1. Yttre slinga: skapa den yttre slingan som itererar genom djuren i vårAnimals-matris.
  2. Datakontroll: skriv kod som söker efter befintliga husdjursdata och visar husdjurs-ID:t om det finns data för ett husdjur.
  3. Inre loop: Skapa en inre loop som visar alla husdjursegenskaper för husdjur med tilldelade data.
  4. Verifieringstest: utför verifieringstester för den kod som du utvecklar i den här övningen.

Viktigt!

Du måste slutföra föregående övning i den här modulen innan du påbörjar den här övningen.

Skapa en loop för att iterera via matrisen ourAnimals

I den här uppgiften skapar du den yttre for loopen som används för att iterera genom djuren i matrisen ourAnimals . Du undersöker relationen mellan dimensionerna i matrisen och parametrarna för loopen for . Du kan också tänka på skillnaderna mellan att använda for instruktioner och foreach instruktioner när du arbetar med flerdimensionella matriser.

  1. Kontrollera att Visual Studio Code är öppet och att filen Program.cs visas i redigeraren.

  2. Lokalisera följande kodrader i kodblocket för urvalssatsen 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. Ta bort instruktionen Console.WriteLine() som används för att visa meddelandet "kommer snart" och lämna en tom kodrad under kodkommentarraden // List all of our current pet information .

    Feedbackmeddelandet behövs inte eftersom du kommer att visa innehållet i matrisen ourAnimals . När du utvecklar koden som motsvarar de andra menyvalen uppdateras även dessa feedbackmeddelanden.

    Lämna meddelandet som säger Press the Enter key to continue.

  4. Starta en for instruktion på följande sätt från den tomma kodraden som du skapade:

    for ()
    {
    }
    
  5. Ta en minut att tänka på vad du behöver uppnå med den här for instruktionen.

    Kom ihåg att en for instruktion har tre delar som styr hur iterationer implementeras: for initializer, for condition och for iterator. Värdena som tilldelats för initialiseraren, för villkor och för iteratorn baseras på vad du behöver uppnå med -instruktionen for .

    I det här fallet används loopen for för att iterera genom matrisen ourAnimals . Du vet att matriser är noll indexerade, vilket innebär att en matris med n element indexeras från 0 till n-1. Du behöver for initializer, för villkor och för att iteratorn ska matcha matrisens dimensioner. I det här fallet vill du att loopen for ska börja vid 0, öka med 1och sluta vid maxPets-1.

    Matrisen ourAnimals deklareras på följande sätt: string[,] ourAnimals = new string[maxPets, 6];. Du vet att värdet som tilldelats maxPets är 8. I den här deklarationen maxPets anger du antalet element i matrisens första dimension, inte det nollbaserade indexnummer som du använder för att referera till element i matrisen. Därför, även om maxPets = 8, varierar matrisindexnumren från 0 till 7.

  6. Om du vill ange kontrollvärdet för loopen for uppdaterar du koden på följande sätt:

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

    Som du ser justerar inställningen för initiatorn till int i = 0; det nollbaserade matrisindexet. På samma sätt matchar villkorsinställningen föri < maxPets; med matrisens första dimension. Slutligen ökar inställningen för iteratorn till i++ loopkontrollvärdet med 1 för varje iteration.

  7. Ta en minut att överväga valet mellan en for -instruktion och en foreach -instruktion när du itererar genom matrisen ourAnimals.

    Målet är att iterera genom varje djur i vårAnimals-matris en i taget. Så varför inte använda en foreach loop? Du vet trots allt att -instruktionen foreach är utformad för fall när du vill iterera genom varje objekt i en matris med objekt.

    Anledningen till att du inte använder en foreach loop i den här situationen är att matrisen ourAnimals är flerdimensionell matris. Eftersom ourAnimals är en flerdimensionell strängmatris är varje element i ourAnimals ett separat objekt av typen sträng. Om du använde en foreach loop för att iterera genom ourAnimalsforeach skulle varje sträng identifieras som ett separat objekt i en lista med 48 strängobjekt (8 x 6 = 48). Instruktionen foreach skulle inte bearbeta de två matrisdimensionerna separat. Med andra ord, en foreach-loop identifierar inte 8 rader med strängelement, där varje rad innehåller en kolumn med 6 element. Eftersom du vill arbeta med ett djur i taget och bearbeta alla sex djuregenskaperna under en enda iteration är en foreach instruktion inte rätt val.

    Men om matrisen ourAnimals var en ojämn matris som konfigurerats som en matris med strängmatriser kan du använda en foreach instruktion. I det här fallet skapar du en foreach för en yttre loop och en andra foreach för en inre loop. Den yttre loopen itererar genom elementen "strängmatris" i den ojämna matrisen. Strängmatriserna är "raderna" i den tvådimensionella matrisen. Den inre loopen itererar genom de "strängelement" som finns i strängmatriserna. Strängelementen i strängmatriserna är "kolumnerna" i den tvådimensionella matrisen.

    Följande kodexempel visar den ojämna matrismetoden.

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

    För Contoso Pets-programmet är det förmodligen enklare att använda en flerdimensionell strängmatris och kapslade for loopar i stället för en ojämn matris och kapslade foreach loopar. Nu när du ser hur varje alternativ fungerar kan du välja själv i framtida kodningsprojekt.

  8. På menyn Visual Studio Code-fil väljer du Spara.

  9. Öppna panelen Integrerad terminal i Visual Studio Code och ange kommandot för att skapa programmet.

    Om du vill öppna integrera terminalen från EXPLORER-vyn högerklickar du på Starter och väljer sedan Öppna i integrerad terminal. Du kan också använda menyn Visa eller Terminal för att öppna panelen Integrerad terminal.

    Om du vill skapa programmet anger du dotnet build kommandot från kommandotolken i Terminal.

  10. Åtgärda eventuella byggfel eller varningar som du ser rapporterade innan du fortsätter.

    Kom ihåg att build-felet och varningsmeddelandena visar vad problemet är och var du hittar det. När du löser problem är det bäst att börja med de problem som uppstår längst upp i koden och arbeta nedåt.

  11. Stäng terminalpanelen.

Sök efter befintliga husdjursdata och visa resultat

I den här uppgiften använder du en if instruktion för att hitta varje husdjur i matrisen ourAnimals som har tilldelats data om husdjursegenskaper. När ett husdjur med tilldelade data hittas visar du petID. När inga data har tilldelats visas ingenting. Du kör koden för att kontrollera att dina for - och if -instruktioner fungerar korrekt.

  1. Skapa en tom kodrad i for instruktionskodblocket på följande sätt:

    for (int i = 0; i < maxPets; i++)
    {
    
    }    
    
  2. Om du vill skapa en if instruktion som söker efter husdjurs-ID-data uppdaterar du koden enligt följande:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
        }
    }    
    
  3. Ta en minut på att fundera över vad det här if uttalandet utvärderar och varför.

    Överväg först vänster sida av uttrycket: ourAnimals[i, 0]. Observera att loopkontrollvariabeln i används för att ange det djur som undersöks. Som du kanske minns, 0 motsvarar i [i, 0]petID-egenskapen. Eftersom den första dimensionen i matrisen motsvarar djurets "nummer" ser den här sidan av uttrycket till att koden kontrollerar värdet som tilldelats petID för varje djur i matrisen.

    För det andra bör du överväga valet av jämförelseoperator. Observera att operatorn not-equal, !=, används. Uttrycket true utvärderas som när värdet som tilldelats petID, ourAnimals[i, 0], INTE är lika med det värde som anges till höger i ekvationen.

    För det tredje bör du överväga värdet till höger i ekvationen. Observera att ett statiskt strängvärde "ID #: " används. Det här är standardvärdet som tilldelas petID när exempeldata genereras. När egenskaper tilldelas till ett djur petID uppdateras värdet och är INTE lika med standardvärdet.

    Detta innebär att kodblocket för instruktionen if kommer att köras när det aktuella djuret har definierade egenskaper.

    Anmärkning

    Detta är ett bra exempel för när != ska användas. Du bryr dig inte om vilket värde som tilldelas petID så länge det inte är standardvärdet.

  4. Om du vill skapa en Console.WriteLine() metod som visar petID inuti -instruktionens if kodblock uppdaterar du koden enligt följande:

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

    Observera att ett matriselement kan användas som ett argument när metoden anropas WriteLine() .

  5. På menyn Visual Studio Code-fil väljer du Spara.

  6. Öppna panelen Integrerad terminal och ange kommandot för att skapa programmet.

  7. Åtgärda eventuella byggfel eller varningar som du ser rapporterade innan du fortsätter.

  8. I kommandotolken i Terminal anger du kommandot för att köra programmet.

    dotnet run Ange kommandot i terminalkommandot för att köra programkoden.

    Om koden genererar ett körningsfel kan du åtgärda felen, spara uppdateringarna och starta om programmet.

  9. I terminalkommandot anger du 1 för att kontrollera att den nya kodlogiken fungerar som förväntat

    Du bör se följande petID värden som visas:

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

    Dessa ID:er motsvarar de husdjur som har tilldelats data.

    Om koden visar olika utdata när du väljer menyalternativ 1 granskar du och uppdaterar koden. Kom ihåg att du måste spara din Program.cs-fil när du har gjort uppdateringar.

  10. Avsluta programmet och stäng sedan terminalpanelen.

Visa alla husdjursegenskaper för husdjur med tilldelade data

I den här uppgiften skapar du en for loop i instruktionskodblocket if som används för att visa alla egenskaper för det aktuella husdjuret.

  1. Leta upp följande kodrader i din Program.cs-fil i kodredigeraren:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
            Console.WriteLine(ourAnimals[i, 0]);
        }
    }    
    
  2. Om du vill skapa loopen for som itererar genom egenskaperna för varje husdjur uppdaterar du koden på följande sätt:

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

    Observera att du nu har en andra for loop som är "kapslad" i kodblocket i den första for loopen. Som ni vet itererar den yttre slingan genom djuren i matrisen ourAnimals . Avsikten är att den inre slingan ska iterera genom egenskaperna hos varje djur. Eftersom djurdata lagras i en flerdimensionell matris blir det enkelt att komma åt djuregenskaper.

  3. Ta en minut att granska uttalandet for som du angav.

    Observera att loopkontrollvariabeln heter j. När du kapslar for loopar är en konventionell metod att använda i i den yttre loopen och j i den inre loopen. Om du följer konventioner som detta blir det enklare för andra att läsa din kod.

    Eftersom sex egenskaper lagras för varje djur, är for-initialiserarenint j = 0; och for-villkoretj < 6;. Den här kombinationen av initiering och villkor matchar matrisindexintervallet som du behöver, 0 - 5.

  4. Om du vill visa varje egenskap hos ett husdjur på en separat rad uppdaterar du koden på följande sätt:

    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. Ta en minut att tänka på den kapslade struktur som du har skapat och de utdata som visas som koden ska generera.

    Observera att värdet som skrivs till konsolen, ourAnimals[i, j], använder loopkontrollvariablerna från både de yttre och inre for looparna.

    Du känner till vart och ett av följande objekt:

    • Matrisens ourAnimals första dimension motsvarar de olika husdjuren.
    • Matrisens ourAnimals andra dimension motsvarar egenskaperna för varje husdjur.
    • Instruktionen if förhindrar att den inre loopen körs när inga husdjursdata har tilldelats till det aktuella husdjuret.
    • Den inre loopen slutför alla iterationer för varje iteration av den yttre loopen.

    Därför vet du att varje djurs egenskaper kommer att visas som avsett.

  6. Om du vill ersätta petID-meddelandet med ett tomt WriteLine()uppdaterar du koden på följande sätt:

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

    Den här sista uppdateringen gör det enklare att se separationen mellan husdjur när utdata visas i konsolen.

  7. På menyn Visual Studio Code-fil väljer du Spara.

  8. Öppna ett terminalfönster och skapa programmet.

  9. Åtgärda eventuella byggfel eller varningar som du ser rapporterade innan du fortsätter.

Kontrollera ditt arbete

I den här uppgiften kör du programmet från den integrerade terminalen och kontrollerar att din kapslade kombination av for och if -instruktioner ger det förväntade resultatet.

  1. Om det behövs öppnar du Visual Studio Codes integrerade terminalpanel.

  2. I kommandotolken i Terminal anger du dotnet run

  3. I kommandotolken i Terminal anger du 1

  4. Kontrollera att husdjursdata visas för de fyra husdjur som har tilldelats data.

    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.
    

    Anmärkning

    Om du inte ser de förväntade resultaten ska du se till att du har sparat den uppdaterade Program.cs filen. Om du inte ser de förväntade resultaten och du inte kan identifiera problemet kan du undersöka Program.cs koden i mappen Final. Mappen Final ingår som en del av nedladdningen som du slutförde under installationen. Vi rekommenderar att du ägnar tid åt att försöka identifiera och åtgärda syntax- och logikproblem i koden innan du kontrollerar Program.cs filen i mappen Final.

  5. Avsluta programmet och stäng sedan terminalpanelen.