Esercizio - Compilare e testare un ciclo per l'immissione di nuovi dati per animali domestici
In questo esercizio si sviluppa codice che controlla l'input dei nuovi ourAnimals dati della matrice. Si calcolano i valori iniziali delle variabili di controllo del ciclo e si costruisce il ciclo che raccoglie i dati specificati dall'utente per gli animali. Le attività dettagliate completate durante questo esercizio sono:
- Calcola petCount: scrivere codice che conti il numero di animali domestici nella
ourAnimalsmatrice a cui sono assegnati dati. - Messaggi condizionali: scrivere codice per visualizzare l'output dei messaggi quando
petCountè minore dimaxPets. - Ciclo esterno: creare una struttura di ciclo che verrà usata per l'immissione di nuovi
ourAnimalsdati di matrice. - Criteri di uscita: scrivere codice che valuti la condizione di uscita per il ciclo di inserimento di nuovi dati nell'array ourAnimals.
- 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.
Contare il numero di animali domestici nella matrice ourAnimals
In questa attività si stabiliscono i criteri di uscita per il ciclo di immissione dei dati e si crea un for ciclo che può essere usato per contare il numero di animali domestici in ourAnimals cui sono stati assegnati dati.
Assicurarsi che Visual Studio Code sia aperto e che il file Program.cs sia visibile nell'editor.
Individuare l'istruzione
switch(menuSelection)e quindi trovare la riga di codicecase "2":.Individuare l'istruzione
Console.WriteLine()che visualizza il messaggio "presto disponibile" e quindi sostituirla con una riga di codice vuota.Nella riga di codice vuota creata immettere il codice seguente per dichiarare le
anotherPetvariabili epetCount:string anotherPet = "y"; int petCount = 0;Queste due variabili controllano l'iterazione di un
whileciclo usato per immettere nuovi dati per animali domestici. Inizializzi entrambe le variabili come parte della dichiarazione.anotherPetviene inizializzato con un valore diyprima dell'inizio delwhileciclo. Riceverà un valore assegnato dall'utente,yonall'interno delwhileciclo.petCountrappresenta il numero di animali con caratteristiche assegnate per animali domestici. Verrà assegnato un valore calcolato all'esterno delwhileciclo e verrà incrementato all'interno1delwhileciclo ogni volta che un nuovo animale viene aggiunto allaourAnimalsmatrice.
Importante
L'ambito delle variabili deve essere sempre il più piccolo possibile. Nell'applicazione Contoso Pets, è possibile definire l'ambito
petCounta livello di applicazione anziché definirlo a livello del codice del bloccocase "2":. L'ambito più ampio consente di accederepetCountda qualsiasi posizione dell'applicazione. SepetCountè stato impostato con ambito a livello di applicazione, è possibile assegnargli un valore quando i dati di esempio vengono creati e il relativo valore viene gestito programmaticamente nel resto dell'applicazione. Ad esempio, quando si trova una casa per un animale domestico e si rimuove l'animaleourAnimalsdomestico dalla matrice, è possibile ridurrepetCountdi1. La domanda è che a quale livello è necessario definire l'ambito di una variabile quando non si è certi che venga usato in altre parti dell'applicazione? In questo caso, è consigliabile definire l'ambitopetCounta livello di applicazione anche se non lo si usa altrove. Dopo tutto, definire l'ambitopetCounta livello di applicazione garantisce che sia disponibile se si decide di usarlo altrove. È possibile definire anche l'ambito di altre variabili a livello di applicazione. In questo modo, le variabili sono sempre a portata di mano e accessibili. Perché quindi non definire l'ambito delle variabili a livello di applicazione quando si ritiene che possano essere usate in un secondo momento nell'applicazione? La definizione dell'ambito delle variabili a un livello superiore al necessario può causare problemi. L'ambito con privilegi elevati aumenta i requisiti delle risorse dell'applicazione e può esporre l'applicazione a rischi di sicurezza non necessari. Man mano che le applicazioni aumentano di dimensioni maggiori e più complesse, richiedono più risorse. I telefoni e i computer allocano memoria per queste risorse quando rientrano nell'ambito. Man mano che le applicazioni diventano più "reali", diventano più accessibili. Le applicazioni sono spesso accessibili dal cloud o da altre applicazioni. Sommando questi problemi, le applicazioni vengono spesso lasciate in esecuzione quando non vengono usate. È importante mantenere sotto controllo i requisiti delle risorse di un'applicazione e il footprint di sicurezza il più piccolo possibile. Anche se i sistemi operativi odierni svolgono un ottimo lavoro per gestire le risorse e proteggere le applicazioni, è comunque consigliabile mantenere le variabili con ambito al livello in cui sono effettivamente necessarie. Nell'app Contoso Pets, se si decide di usarepetCountin modo più ampio all'interno dell'applicazione, è possibile aggiornare il codice per definire l'ambitopetCounta un livello superiore. Ricordarsi di mantenere l'ambito delle variabili il più piccolo possibile e aumentare il proprio ambito solo quando diventa necessario.Nella riga di codice sotto le dichiarazioni di variabile per creare un ciclo che esegue l'iterazione degli animali nella matrice
ourAnimals, immettere il codice seguente:for (int i = 0; i < maxPets; i++) { }Questo codice dovrebbe avere un aspetto familiare. Userai questo
forciclo ogni volta che iteri su laourAnimalsmatrice.All'interno del blocco di codice del ciclo
for, per verificare se i dati sulle caratteristiche degli animali domestici sono stati assegnati a un animale, inserire il seguente codice:if (ourAnimals[i, 0] != "ID #: ") { }Anche in questo caso, questo codice dovrebbe avere un aspetto familiare. Usi questa istruzione
ifogni volta che controlli se le caratteristiche degli animali da compagnia sono state assegnate.All'interno del blocco di codice dell'oggetto
ifcreato, per incrementarepetCountdi 1, immettere il codice seguente:petCount += 1;Dedicare un attimo a esaminare il ciclo
forcompletato.Il ciclo completato
fordovrebbe essere simile al codice seguente:for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { petCount += 1; } }Questo codice eseguirà un ciclo attraverso la matrice per controllare i
ourAnimalsdati assegnati. Quando trova un animale con dati assegnati, incrementapetCounter.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 segnalati prima di continuare.
Annotazioni
Per il momento, è possibile ignorare il messaggio di avviso relativo all'assegnazione ma al mancato utilizzo di
anotherPet. Aggiungerai codice che utilizzaanotherPetpiù avanti in questo esercizio.Se si verificano errori di compilazione, tenere presente che i messaggi di errore di compilazione e di avviso indicano qual è il problema e dove è possibile trovarlo. Se si aggiorna il codice, ricordarsi di salvare le modifiche prima della ricompilazione.
Chiudere il pannello Terminale.
Mostra il messaggio di output quando petCount è minore di maxPets
In questa attività si verifica se petCount è minore di maxPets e, in caso affermativo, viene visualizzato un messaggio per l'utente.
In una riga di codice vuota sotto il
forciclo creato, per verificare sepetCountè minore dimaxPets, immettere il codice seguente:if (petCount < maxPets) { }All'interno del blocco di codice dell'istruzione
if, per visualizzare un messaggio all'utente, immettere il codice seguente:Console.WriteLine($"We currently have {petCount} pets that need homes. We can manage {(maxPets - petCount)} more.");Gli utenti dell'applicazione stanno per immettere le caratteristiche degli animali domestici. Questo messaggio fornisce un contesto importante.
Dedicare un attimo a esaminare il ramo di codice
case "2":dell'istruzioneswitch.A questo punto, il
case "2":ramo di codice dovrebbe essere simile al codice seguente:case "2": // Add a new animal friend to the ourAnimals array string anotherPet = "y"; int petCount = 0; for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { petCount += 1; } } if (petCount < maxPets) { Console.WriteLine($"We currently have {petCount} pets that need homes. We can manage {(maxPets - petCount)} more."); } Console.WriteLine("Press the Enter key to continue."); readResult = Console.ReadLine(); break;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.
Correggere eventuali errori di compilazione segnalati prima di continuare.
Anche in questo caso, è possibile ignorare il messaggio di avviso relativo al fatto che
anotherPetviene assegnato ma mai utilizzato. Nell'attività successiva, inizierai a costruire ilwhileciclo usato per immettere i dati per uno o più animali domestici. L'espressione creata per ilwhileciclo useràanotherPete questo messaggio di avviso verrà eliminato.Tenere presente che i messaggi di avviso sono aspetti da preoccuparsi, ma non impediscono l'esecuzione del programma.
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 non genera un errore di runtime, il menu principale dell'app dovrebbe ora essere visualizzato nel pannello Terminale.
Al prompt dei comandi del terminale immettere 2
Questo valore corrisponde al ramo di codice
case "2":.Verificare che il messaggio seguente sia visualizzato nel terminale.
We currently have 4 pets that need homes. We can manage 4 more. Press the Enter key to continue.Se non viene visualizzato il messaggio previsto, esaminare il codice per identificare e risolvere il problema. Salvare le modifiche, ricompilare ed eseguire di nuovo l'app. Assicurarsi che il codice funzioni correttamente come previsto prima di continuare.
Al prompt dei comandi del terminale premere INVIO per continuare a eseguire l'applicazione.
Uscire dall'applicazione e quindi chiudere il pannello Terminale.
Creare una struttura di ciclo che verrà utilizzata per l'immissione di nuovi dati dell'array ourAnimals
In questa attività, crei un while ciclo che continua a iterare finché anotherPet è uguale a y e petCount è minore di maxPets.
Nell'editor di codice creare una riga di codice vuota sotto il
if (petCount < maxPets)blocco di codice.Per iniziare il processo di creazione del nuovo
whileciclo, immettere il codice seguente:while (anotherPet == "y" && petCount < maxPets) { }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.
Si noti che non si riceve più il messaggio di avviso riguardante il mancato utilizzo di
anotherPet.Se sono stati segnalati errori di compilazione o avvisi, correggere i problemi prima di continuare.
Controllare la condizione di uscita per il nuovo ciclo di animali domestici
In questa attività si aggiorna il blocco di while (anotherPet == "y" && petCount < maxPets) codice. Il nuovo codice incrementa petCount e quindi controlla se petCount è minore di maxPets. Se petCount è minore di maxPets, chiedere all'utente se vuole immettere informazioni per un altro animale domestico e assicurarsi che la risposta sia y o n. Dopo il blocco di codice while (anotherPet == "y" && petCount < maxPets), controlla il valore di petCount. Se petCount è uguale a maxPets, si informa l'utente che non è possibile aggiungere altri animali domestici.
Annotazioni
Il codice usato per immettere i dati degli animali domestici viene sviluppato nell'esercizio successivo. Per il momento, petCount viene incrementato come se i dati fossero stati immessi e salvati nella ourAnimals matrice. In questo modo è possibile completare lo sviluppo della logica di codice associata al while ciclo .
Creare una riga di codice vuota all'interno del blocco di codice del
while (anotherPet == "y" && petCount < maxPets)ciclo creato nell'attività precedente.Per incrementare
petCount, immettere il codice seguente:// increment petCount (the array is zero-based, so we increment the counter after adding to the array) petCount = petCount + 1;Per verificare se
petCountè minore dimaxPets, immettere il codice seguente:// check maxPet limit if (petCount < maxPets) { }All'interno del blocco di codice dell'istruzione
ifcreata, per chiedere all'utente se vuole aggiungere un altro animale domestico, immettere il codice seguente:// another pet? Console.WriteLine("Do you want to enter info for another pet (y/n)");Sotto il
WriteLine()messaggio immesso, per leggere la risposta dell'utente e assicurarsi che l'utente ha immesso "y" o "n", immettere il codice seguente:do { readResult = Console.ReadLine(); if (readResult != null) { anotherPet = readResult.ToLower(); } } while (anotherPet != "y" && anotherPet != "n");Individua l'istruzione
breakche separacase "2";dacase "3";nella tua istruzioneswitch.Nota le istruzioni
Console.WriteLine()eConsole.ReadLine()alla fine del nostro codicecase "2";.Questo codice visualizza un messaggio all'utente e quindi sospende l'applicazione.
Per racchiudere le istruzioni
Console.WriteLine()eConsole.ReadLine()all'interno di un'istruzioneif, aggiornare il codice nel modo seguente:if (petCount >= maxPets) { Console.WriteLine("Press the Enter key to continue."); readResult = Console.ReadLine(); } break; case "3":Il valore di
petCountviene incrementato all'interno delwhileciclo. SepetCountè uguale amaxPets, non è possibile aggiungere altri animali domestici allaourAnimalsmatrice. È consigliabile informare l'utente quando si verifica questo problema.Per informare l'utente che Contoso Pets ha raggiunto la capacità, aggiornare il codice nel modo seguente:
if (petCount >= maxPets) { Console.WriteLine("We have reached our limit on the number of pets that we can manage."); Console.WriteLine("Press the Enter key to continue."); readResult = Console.ReadLine(); } break; case "3":Dedicare un attimo a esaminare il codice nel ciclo
whilee il messaggio utente creato.Il
while (anotherPet == "y" && petCount < maxPets)ciclo e il codice che visualizza il messaggio utente dovrebbero essere simili al codice seguente:while (anotherPet == "y" && petCount < maxPets) { // increment petCount (the array is zero-based, so we increment the counter after adding to the array) petCount = petCount + 1; // check maxPet limit if (petCount < maxPets) { // another pet? Console.WriteLine("Do you want to enter info for another pet (y/n)"); do { readResult = Console.ReadLine(); if (readResult != null) { anotherPet = readResult.ToLower(); } } while (anotherPet != "y" && anotherPet != "n"); } } if (petCount >= maxPets) { Console.WriteLine("We have reached our limit on the number of pets that we can manage."); Console.WriteLine("Press the Enter key to continue."); readResult = Console.ReadLine(); }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.
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 logica di ciclo e di diramazione creata funzioni come previsto.
Se necessario, aprire il pannello del terminale integrato di Visual Studio Code.
Al prompt dei comandi del terminale immettere dotnet run
Al prompt dei comandi del terminale immettere 2
Verificare di visualizzare i messaggi seguenti:
We currently have 4 pets that need homes. We can manage 4 more. Do you want to enter info for another pet (y/n)Al prompt dei comandi del terminale immettere n
Verificare che il codice esca dal ciclo per l'immissione di nuovi animali domestici quando si immette "n".
Se la logica del codice funziona come previsto, vedrai il menu principale visualizzato nel terminale.
Se il codice non esce dal ciclo quando previsto, premere CTRL+C nel terminale per forzare l'arresto dell'esecuzione. È necessario eseguire manualmente il codice e tracciare i valori delle variabili dei criteri di uscita. Aggiornare il codice, se necessario, per assicurarsi di uscire dal
whileciclo quando l'utente immette "n". Salvare le modifiche, ricompilare il programma ed eseguire il test di verifica per tornare a questo punto.Al prompt dei comandi del terminale immettere 2
Ancora una volta, verranno visualizzati i messaggi seguenti:
We currently have 4 pets that need homes. We can manage 4 more. Do you want to enter info for another pet (y/n)Al prompt dei comandi del terminale immettere y
Prenditi un minuto per considerare come
petCountviene utilizzato nel tuo codice.È necessario comprendere la logica del codice prima di poter convalidare il codice.
In questo caso, la logica del codice si basa sulla relazione tra
petCountemaxPets. Si sa chemaxPetsviene assegnato un valore di8, ma che ne dici dipetCount? Gli elementi seguenti consentono di valutare la logica implementata:Si sa che
petCountè4quando si immette la prima iterazione delwhileciclo.Sai che
petCountviene incrementato ogni volta che il ciclowhileesegue un'iterazione.Si sa che il valore assegnato a
petCounte il modo in cuipetCountviene incrementato influiscono sulla modalità di archiviazione dei dati nellaourAnimalsmatrice. Gli elementi seguenti illustrano la relazione trapetCounte i dati archiviati inourAnimals:- L'applicazione aggiunge quattro animali domestici alla
ourAnimalsmatrice quando crea i dati di esempio. - L'applicazione archivia nuovi dati nella
ourAnimalsmatrice quando il valore dipetCountè4. Questo non è un bug. Il codice ha senso quando si ricorda che gli elementi della matrice sono in base zero. Ad esempio,ourAnimals[0,0]contiene l'ID dell'animale domestico per l'animale1eourAnimals[3,0]contiene l'ID dell'animale domestico per l'animale4. Pertanto, quandopetCount4si archiviano i dati per il quinto animale domestico. - L'applicazione archivierà i dati degli animali domestici nella matrice prima di incrementare
petCount. - L'applicazione incrementa
petCountprima di chiedere all'utente se desidera aggiungere un altro animale domestico. - Quando l'applicazione visualizza la richiesta Di immettere le informazioni per un altro animale domestico (y/n) per la prima volta,
petCountè già impostato su5.
- L'applicazione aggiunge quattro animali domestici alla
Se l'utente immette y alla prima richiesta Vuoi inserire le informazioni su un altro animale domestico (y/n), sai che:
- Il ciclo
while (anotherPet == "y" && petCount < maxPets)eseguirà l'iterazione. Sai che il ciclo itererà perchéanotherPet == "y"epetCount < maxPets. - Il valore assegnato a
petCountverrà incrementato (quando il ciclowhileesegue l'iterazione). - Il valore assegnato a
petCountsarà6(dopo che l'utente immette y la prima volta).
- Il ciclo
Tenere presente questa analisi della logica del codice mentre si continua a testare l'applicazione.
Si noti che il pannello Terminale viene aggiornato con lo stesso messaggio "un altro animale domestico?", ma il codice non visualizza
petCountaggiornato.Il pannello Terminale dovrebbe ora mostrare l'output seguente:
We currently have 4 pets that need homes. We can manage 4 more. Do you want to enter info for another pet (y/n) y Do you want to enter info for another pet (y/n)Al prompt dei comandi del terminale immettere y
Quando si immette
yuna seconda volta,petCountviene incrementato a7. QuindipetCountè ancora minore dimaxPetsAl prompt dei comandi del terminale immettere y
Quando si immette
yuna terza volta,petCountviene incrementato a8. QuindipetCountora è uguale amaxPetsVerificare che il codice esce dal
whileciclo quando si immette y la terza volta.Il pannello Terminale dovrebbe ora mostrare l'output seguente:
We currently have 4 pets that need homes. We can manage 4 more. Do you want to enter info for another pet (y/n) y Do you want to enter info for another pet (y/n) y Do you want to enter info for another pet (y/n) y We have reached our limit on the number of pets that we can manage. Press the Enter key to continue.Se il codice non esce dal ciclo quando previsto, analizza manualmente il codice passo passo e traccia i valori delle variabili dei criteri di uscita. Aggiornare il codice per assicurarsi di uscire dal ciclo quando
petCountraggiunge un valore uguale amaxPets. Continuare a rispondere a "y" finché non si sa chepetCountè uguale amaxPets, che ha un valore predefinito di8.Al prompt dei comandi del terminale premere INVIO per continuare a eseguire l'applicazione.
Uscire dall'applicazione e quindi chiudere il pannello Terminale.