Esercizio - Scrivere codice per visualizzare tutti i dati dell'array ourAnimals

Completato

In questo esercizio si scrive la struttura di ciclo annidato e il blocco di codice di selezione usato per visualizzare le informazioni sulla matrice OurAnimals. Le attività dettagliate completate durante questo esercizio sono:

  1. Ciclo esterno: creare il ciclo esterno che scorre gli animali nella matrice ourAnimals.
  2. Controllo dei dati: scrivere codice che controlla i dati esistenti degli animali domestici e visualizza l'ID animale domestico se esistono dati per un animale domestico.
  3. Ciclo interno: creare un ciclo interno che visualizza tutte le caratteristiche dell'animale domestico per gli animali domestici con dati assegnati.
  4. Test di verifica: eseguire test di verifica per il codice sviluppato in questo esercizio.

Importante

Prima di iniziare questo esercizio, è necessario completare l'esercizio precedente in questo modulo.

Creare un ciclo per scorrere la matrice ourAnimals

In questa attività viene creato il ciclo esterno for usato per scorrere gli animali nella matrice ourAnimals. Si esamina la relazione tra le dimensioni della matrice e i parametri del for ciclo. Si considerano anche le differenze tra le istruzioni for e le istruzioni foreach quando si lavora con matrici multidimensionali.

  1. Assicurarsi che Visual Studio Code sia aperto e che il file Program.cs sia visibile nell'editor.

  2. All'interno del blocco di codice per l'istruzione switch(menuSelection) di selezione individuare le righe di codice seguenti:

    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. Eliminare l'istruzione Console.WriteLine() usata per visualizzare il messaggio "presto disponibile" e lasciare una riga di codice vuota sotto la riga di commento del // List all of our current pet information codice.

    Il messaggio di feedback non sarà necessario perché verrà visualizzato il contenuto della ourAnimals matrice. Man mano che si sviluppa il codice corrispondente alle altre selezioni di menu, tali messaggi di feedback verranno aggiornati anche.

    Lasciare il messaggio che dice Press the Enter key to continue.

  4. A partire dalla riga di codice vuota creata, iniziare un'istruzione for come indicato di seguito:

    for ()
    {
    }
    
  5. Prendere in considerazione gli obiettivi necessari con questa istruzione for.

    Tenere presente che un'istruzione for ha tre parti che controllano la modalità di implementazione delle iterazioni: per l'inizializzatore, per la condizione e per l'iteratore. I valori assegnati per l'inizializzatore, per la condizione e per l'iteratore sono basati su ciò che si vuole ottenere con l'istruzione for.

    In questo caso, il for ciclo viene usato per scorrere la matriceourAnimals. Si sa che le matrici sono indicizzate zero, vale a dire che una matrice con n elementi viene indicizzata da 0 a n-1. È necessario per l'inizializzatore, per la condizione e per l'iteratore in modo che corrisponda alle dimensioni della matrice. In questo caso, vuoi che il ciclo for inizi da 0, incrementi di 1 e termini a maxPets-1.

    La ourAnimals matrice viene dichiarata come segue: string[,] ourAnimals = new string[maxPets, 6];. Si sa che il valore assegnato a maxPets è 8. In questa dichiarazione specifica maxPets il numero di elementi nella prima dimensione della matrice, non il numero di indice in base zero utilizzato per fare riferimento agli elementi nella matrice. Pertanto, anche se maxPets = 8, i numeri di indice della matrice vanno da 0 a 7.

  6. Per specificare il valore di controllo del ciclo for, aggiorna il tuo codice come segue:

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

    Come si può notare, l’impostazione per l'inizializzatore deve int i = 0; essere effettuata in modo che sia allineato con l'indice di matrice in base zero. Analogamente, l'impostazione di per la condizione su i < maxPets; effettua l’allineamento con la prima dimensione della matrice. Infine, l'impostazione di per iteratore su i++ incrementerà il valore del controllo ciclo di 1 per ogni iterazione.

  7. Prendere in considerazione la scelta tra un'istruzione for e un'istruzione foreach durante l'iterazione della matrice ourAnimals.

    L'obiettivo è quello di scorrere ogni animale nella matrice ourAnimals uno alla volta. Perché non usare un foreach ciclo? Dopo tutto, si sa che l'istruzione foreach è progettata per i casi in cui si vuole scorrere ogni elemento in una matrice di elementi.

    Il motivo per cui non si usa un foreach ciclo in questa situazione è dovuto al fatto che la ourAnimals matrice è una matrice multidimensionale. Poiché ourAnimals è una matrice di stringhe multidimensionali, ogni elemento contenuto in ourAnimals è un elemento separato di tipo string. Se hai utilizzato un foreach ciclo per scorrere ourAnimals, il foreach riconoscerebbe ogni stringa come un elemento separato in un elenco di stringhe composto da 48 elementi (8 x 6 = 48). L'istruzione foreach non elabora separatamente le due dimensioni della matrice. In altre parole, un ciclo foreach non riconosce le righe 8 di elementi stringa, in cui ciascuna riga contiene una colonna di elementi 6. Poiché si vuole lavorare con un solo animale alla volta e elaborare tutte e sei le caratteristiche animali durante un'iterazione singola, un'istruzione foreach non è la scelta giusta.

    Tuttavia, se la ourAnimals matrice era una matrice frastagliata configurata come matrice di matrici di stringhe, è possibile usare un'istruzione foreach . In questo caso, si creerebbe un foreach per un ciclo esterno e un secondo foreach per un ciclo interno. Il ciclo esterno scorre gli elementi "matrice di stringhe" nella matrice di matrici. Le matrici di stringhe sono le "righe" nella matrice bidimensionale. Il ciclo interno scorre gli elementi "stringa" contenuti nelle matrici di stringhe. Gli elementi stringa nelle matrici di stringhe sono le "colonne" nella matrice bidimensionale.

    L'esempio di codice seguente illustra l'approccio di matrice frastagliata.

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

    Per l'applicazione Contoso Pets, è probabilmente più facile usare una matrice di stringhe multidimensionali e cicli annidati for anziché una matrice irregolare e cicli annidati foreach . Ora che vedi come funziona ogni opzione, puoi fare la tua scelta nei tuoi futuri progetti di programmazione.

  8. Scegliere Salva dal menu File di Visual Studio Code.

  9. Aprire il pannello Terminale integrato in Visual Studio Code e immettere il comando per Compilare il programma.

    Per aprire il terminale di integrazione dalla visualizzazione EXPLORER, fare clic con il pulsante destro del mouse su Starter e quindi scegliere Apri nel terminale integrato. È anche possibile usare il menu Visualizza o Terminale per aprire il pannello Terminale integrato.

    Per Compilare il programma, immettere il dotnet build comando dal prompt dei comandi del terminale.

  10. Correggere eventuali errori di compilazione o avvisi segnalati prima di continuare.

    Tenere presente che i messaggi di errore di compilazione e di avviso indicano qual è il problema e dove è possibile trovarlo. Quando si risolvono i problemi, è consigliabile iniziare con i problemi che si verificano nella parte superiore del codice e procedere verso il basso.

  11. Chiudere il pannello Terminale.

Controllare i dati degli animali domestici esistenti e visualizzare i risultati

In questa attività si usa un'istruzione if per trovare ogni animale domestico nella ourAnimals matrice a cui sono stati assegnati dati sulle caratteristiche degli animali domestici. Quando viene trovato un animale domestico con dati assegnati, viene visualizzato il petID. Quando non sono assegnati dati, non viene visualizzato alcun elemento. Esegui il codice per verificare che le istruzioni for e if funzionino correttamente.

  1. Creare una riga di codice vuota all'interno del for blocco di codice dell'istruzione come indicato di seguito:

    for (int i = 0; i < maxPets; i++)
    {
    
    }    
    
  2. Per creare un'istruzione if che controlla i dati relativi all'ID animale domestico, aggiornare il codice nel modo seguente:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
        }
    }    
    
  3. Prendere in considerazione il motivo e la valutazione di questa istruzione if.

    Prima di tutto, considerare il lato sinistro dell'espressione: ourAnimals[i, 0]. Si noti che la variabile i di controllo del ciclo viene usata per specificare l'animale da esaminare. Come ricorderai, 0 in [i, 0] corrisponde alla caratteristica petID. Poiché la prima dimensione della matrice corrisponde al "numero" dell'animale, questo lato dell'espressione garantisce che il codice controlli il valore assegnato a petID per ogni animale nella matrice.

    In secondo luogo, considerare la scelta dell'operatore di confronto. Si noti che viene usato l'operatore diverso da, !=. L'espressione restituisce come true ogni volta che il valore assegnato a petID, ourAnimals[i, 0], non è uguale al valore elencato a destra dell'equazione.

    In terzo luogo, considerare il valore a destra dell'equazione. Si noti che viene usato un valore stringa statico di "ID #: " . Questo è il valore predefinito assegnato a petID quando vengono generati i dati di esempio. Quando le caratteristiche vengono assegnate a un animale, il petID valore viene aggiornato e NON sarà uguale al valore predefinito.

    Questo indica che il blocco di codice dell'istruzione if verrà eseguito quando l'animale corrente ha caratteristiche definite.

    Annotazioni

    Questo è un buon esempio per quando != deve essere usato. Non è importante specificare il valore assegnato a petID purché non sia il valore predefinito.

  4. Per creare il Console.WriteLine() metodo che visualizza l'oggetto petID all'interno del blocco di codice dell'istruzione if, aggiorna il codice nel modo seguente:

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

    Si noti che un elemento di matrice può essere usato come argomento quando si chiama il WriteLine() metodo .

  5. Scegliere Salva dal menu File di Visual Studio Code.

  6. Aprire il pannello Terminale integrato e immettere il comando per Compilare il programma.

  7. Correggere eventuali errori di compilazione o avvisi segnalati prima di continuare.

  8. Al prompt dei comandi del terminale immettere il comando per eseguire il programma.

    Immettere il dotnet run comando al prompt dei comandi del terminale per eseguire il codice del programma.

    Se il codice genera un errore di runtime, correggere gli errori, salvare gli aggiornamenti e riavviare l'applicazione.

  9. Al prompt dei comandi del terminale, per verificare che la nuova logica del codice funzioni come previsto, immettere 1

    Verranno visualizzati i valori seguenti petID :

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

    Questi ID corrispondono agli animali domestici a cui sono stati assegnati dati.

    Se il codice visualizza output diverso quando si seleziona l'opzione di menu 1, esaminare e aggiornare il codice. Tenere presente che è necessario salvare il file di Program.cs dopo aver apportato gli aggiornamenti.

  10. Uscire dall'applicazione e quindi chiudere il pannello Terminale.

Visualizzare tutte le caratteristiche degli animali domestici con dati assegnati

In questa attività viene creato un ciclo for all'interno del blocco di codice dell'istruzione if usato per visualizzare tutte le caratteristiche dell'animale domestico corrente.

  1. Nell'editor di codice individuare le righe di codice seguenti nel file Program.cs:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
            Console.WriteLine(ourAnimals[i, 0]);
        }
    }    
    
  2. Per creare il ciclo for che scorrerà le caratteristiche di ogni animale domestico, aggiornare il codice come indicato di seguito:

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

    Si noti che ora c'è un secondo ciclo for "annidato" all'interno del blocco di codice del primo ciclo for. Come sapete, il ciclo esterno scorre gli animali nella matrice ourAnimals. L'intenzione è per il ciclo interno di scorrere le caratteristiche di ogni animale. Poiché i dati sugli animali vengono archiviati in una matrice multidimensionale, sarà facile accedere alle caratteristiche degli animali.

  3. Soffermarsi un momento a esaminare l'istruzione for immessa.

    Si noti che la variabile di controllo del ciclo è denominata j. Quando si annidano for cicli, un approccio convenzionale consiste nell'usare i nel ciclo esterno e j nel ciclo interno. Le convenzioni seguenti semplificano la lettura del codice da parte di altri utenti.

    Poiché sei caratteristiche vengono archiviate per ogni animale, l'inizializzatore del ciclo for è int j = 0; e la condizione del ciclo for è j < 6;. Questa combinazione di inizializzatore e condizione corrisponde all'intervallo di indici di matrice necessario, 0 - 5.

  4. Per visualizzare ogni caratteristica di un animale domestico su una riga separata, aggiornare il codice come segue:

    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. Prendi un minuto per considerare la struttura annidata che hai creato e l'output visualizzato che il tuo codice produrrà.

    Si noti che il valore scritto nella console, ourAnimals[i, j], usa le variabili di controllo del ciclo sia dai cicli esterni sia interni for.

    Ognuno dei seguenti elementi è noto:

    • La prima dimensione della ourAnimals matrice corrisponde ai diversi animali domestici.
    • La seconda dimensione della ourAnimals matrice corrisponde alle caratteristiche di ogni animale domestico.
    • L'istruzione if impedisce l'esecuzione del ciclo interno quando non sono presenti dati per animali domestici assegnati all'animale domestico corrente.
    • Il ciclo interno completa tutte le iterazioni per ogni iterazione del ciclo esterno.

    Pertanto, si sa che le caratteristiche di ogni animale verranno visualizzate come previsto.

  6. Per sostituire il messaggio petID con un valore vuoto WriteLine(), aggiornare il codice come indicato di seguito:

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

    Questo aggiornamento finale semplifica la separazione tra animali domestici quando l'output viene visualizzato nella console.

  7. Scegliere Salva dal menu File di Visual Studio Code.

  8. Aprire un riquadro Terminale e Compilare il programma.

  9. Correggere eventuali errori di compilazione o avvisi segnalati prima di continuare.

Controlla il tuo lavoro

In questa attività si esegue l'applicazione dal terminale integrato e si verifica che la combinazione annidata elle istruzioni for e if produca il risultato previsto.

  1. Se necessario, aprire il pannello Terminale integrato di Visual Studio Code.

  2. Al prompt dei comandi del terminale immettere dotnet run

  3. Al prompt dei comandi del terminale immettere 1

  4. Verificare che i dati degli animali domestici siano visualizzati per i quattro animali domestici a cui sono stati assegnati i dati.

    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.
    

    Annotazioni

    Se non vengono visualizzati i risultati previsti, assicurarsi di aver salvato il file di Program.cs aggiornato. Se non vengono visualizzati i risultati previsti e non è possibile identificare il problema, è possibile esaminare il codice Program.cs nella cartella Finale. La cartella Finale viene inclusa come parte del download completato durante l'installazione. È consigliabile dedicare tempo a cercare di identificare e risolvere il problema di sintassi e logica nel codice prima di controllare il file Program.cs nella cartella Finale.

  5. Uscire dall'applicazione e quindi chiudere il pannello Terminale.