Esercizio - Scrivere codice per visualizzare tutti i dati dell'array ourAnimals
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:
- Ciclo esterno: creare il ciclo esterno che scorre gli animali nella matrice ourAnimals.
- 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.
- Ciclo interno: creare un ciclo interno che visualizza tutte le caratteristiche dell'animale domestico per gli animali domestici con dati assegnati.
- 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.
Assicurarsi che Visual Studio Code sia aperto e che il file Program.cs sia visibile nell'editor.
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;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 informationcodice.Il messaggio di feedback non sarà necessario perché verrà visualizzato il contenuto della
ourAnimalsmatrice. 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.A partire dalla riga di codice vuota creata, iniziare un'istruzione
forcome indicato di seguito:for () { }Prendere in considerazione gli obiettivi necessari con questa istruzione
for.Tenere presente che un'istruzione
forha 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'istruzionefor.In questo caso, il
forciclo viene usato per scorrere la matriceourAnimals. Si sa che le matrici sono indicizzate zero, vale a dire che una matrice connelementi viene indicizzata da0an-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 cicloforinizi da0, incrementi di1e termini amaxPets-1.La
ourAnimalsmatrice viene dichiarata come segue:string[,] ourAnimals = new string[maxPets, 6];. Si sa che il valore assegnato amaxPetsè8. In questa dichiarazione specificamaxPetsil 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 semaxPets = 8, i numeri di indice della matrice vanno da0a7.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 sui < maxPets;effettua l’allineamento con la prima dimensione della matrice. Infine, l'impostazione di per iteratore sui++incrementerà il valore del controllo ciclo di1per ogni iterazione.Prendere in considerazione la scelta tra un'istruzione
fore un'istruzioneforeachdurante l'iterazione della matrice ourAnimals.L'obiettivo è quello di scorrere ogni animale nella matrice ourAnimals uno alla volta. Perché non usare un
foreachciclo? Dopo tutto, si sa che l'istruzioneforeachè progettata per i casi in cui si vuole scorrere ogni elemento in una matrice di elementi.Il motivo per cui non si usa un
foreachciclo in questa situazione è dovuto al fatto che laourAnimalsmatrice è una matrice multidimensionale. PoichéourAnimalsè una matrice di stringhe multidimensionali, ogni elemento contenuto inourAnimalsè un elemento separato di tipo string. Se hai utilizzato unforeachciclo per scorrereourAnimals, ilforeachriconoscerebbe ogni stringa come un elemento separato in un elenco di stringhe composto da 48 elementi (8 x 6 = 48). L'istruzioneforeachnon elabora separatamente le due dimensioni della matrice. In altre parole, un cicloforeachnon riconosce le righe8di elementi stringa, in cui ciascuna riga contiene una colonna di elementi6. Poiché si vuole lavorare con un solo animale alla volta e elaborare tutte e sei le caratteristiche animali durante un'iterazione singola, un'istruzioneforeachnon è la scelta giusta.Tuttavia, se la
ourAnimalsmatrice era una matrice frastagliata configurata come matrice di matrici di stringhe, è possibile usare un'istruzioneforeach. In questo caso, si creerebbe unforeachper un ciclo esterno e un secondoforeachper 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
foranziché una matrice irregolare e cicli annidatiforeach. Ora che vedi come funziona ogni opzione, puoi fare la tua scelta nei tuoi futuri progetti di programmazione.Scegliere Salva dal menu File di Visual Studio Code.
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 buildcomando dal prompt dei comandi del terminale.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.
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.
Creare una riga di codice vuota all'interno del
forblocco di codice dell'istruzione come indicato di seguito:for (int i = 0; i < maxPets; i++) { }Per creare un'istruzione
ifche 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 #: ") { } }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 variabileidi controllo del ciclo viene usata per specificare l'animale da esaminare. Come ricorderai,0in[i, 0]corrisponde alla caratteristicapetID. Poiché la prima dimensione della matrice corrisponde al "numero" dell'animale, questo lato dell'espressione garantisce che il codice controlli il valore assegnato apetIDper 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 cometrueogni 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 apetIDquando vengono generati i dati di esempio. Quando le caratteristiche vengono assegnate a un animale, ilpetIDvalore viene aggiornato e NON sarà uguale al valore predefinito.Questo indica che il blocco di codice dell'istruzione
ifverrà eseguito quando l'animale corrente ha caratteristiche definite.Annotazioni
Questo è un buon esempio per quando
!=deve essere usato. Non è importante specificare il valore assegnato apetIDpurché non sia il valore predefinito.Per creare il
Console.WriteLine()metodo che visualizza l'oggettopetIDall'interno del blocco di codice dell'istruzioneif, 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 .Scegliere Salva dal menu File di Visual Studio Code.
Aprire il pannello Terminale integrato e immettere il comando per Compilare il programma.
Correggere eventuali errori di compilazione o avvisi segnalati prima di continuare.
Al prompt dei comandi del terminale immettere il comando per eseguire il programma.
Immettere il
dotnet runcomando 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.
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.
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.
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]); } }Per creare il ciclo
forche 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 ciclofor. Come sapete, il ciclo esterno scorre gli animali nella matriceourAnimals. 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.Soffermarsi un momento a esaminare l'istruzione
forimmessa.Si noti che la variabile di controllo del ciclo è denominata
j. Quando si annidanoforcicli, un approccio convenzionale consiste nell'usareinel ciclo esterno ejnel 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.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]); } } }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 internifor.Ognuno dei seguenti elementi è noto:
- La prima dimensione della
ourAnimalsmatrice corrisponde ai diversi animali domestici. - La seconda dimensione della
ourAnimalsmatrice corrisponde alle caratteristiche di ogni animale domestico. - L'istruzione
ifimpedisce 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.
- La prima dimensione della
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.
Scegliere Salva dal menu File di Visual Studio Code.
Aprire un riquadro Terminale e Compilare il programma.
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.
Se necessario, aprire il pannello Terminale integrato di Visual Studio Code.
Al prompt dei comandi del terminale immettere dotnet run
Al prompt dei comandi del terminale immettere 1
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.
Uscire dall'applicazione e quindi chiudere il pannello Terminale.