Esercizio - Compilare e testare un ciclo per l'immissione di nuovi dati per animali domestici

Completato

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:

  1. Calcola petCount: scrivere codice che conti il numero di animali domestici nella ourAnimals matrice a cui sono assegnati dati.
  2. Messaggi condizionali: scrivere codice per visualizzare l'output dei messaggi quando petCount è minore di maxPets.
  3. Ciclo esterno: creare una struttura di ciclo che verrà usata per l'immissione di nuovi ourAnimals dati di matrice.
  4. Criteri di uscita: scrivere codice che valuti la condizione di uscita per il ciclo di inserimento di nuovi dati nell'array ourAnimals.
  5. 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.

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

  2. Individuare l'istruzione switch(menuSelection) e quindi trovare la riga di codice case "2":.

  3. Individuare l'istruzione Console.WriteLine() che visualizza il messaggio "presto disponibile" e quindi sostituirla con una riga di codice vuota.

  4. Nella riga di codice vuota creata immettere il codice seguente per dichiarare le anotherPet variabili e petCount :

    string anotherPet = "y";
    int petCount = 0;
    

    Queste due variabili controllano l'iterazione di un while ciclo usato per immettere nuovi dati per animali domestici. Inizializzi entrambe le variabili come parte della dichiarazione.

    • anotherPet viene inizializzato con un valore di y prima dell'inizio del while ciclo. Riceverà un valore assegnato dall'utente, y o n all'interno del while ciclo.

    • petCount rappresenta il numero di animali con caratteristiche assegnate per animali domestici. Verrà assegnato un valore calcolato all'esterno del while ciclo e verrà incrementato all'interno 1 del while ciclo ogni volta che un nuovo animale viene aggiunto alla ourAnimals matrice.

    Importante

    L'ambito delle variabili deve essere sempre il più piccolo possibile. Nell'applicazione Contoso Pets, è possibile definire l'ambito petCount a livello di applicazione anziché definirlo a livello del codice del blocco case "2":. L'ambito più ampio consente di accedere petCount da qualsiasi posizione dell'applicazione. Se petCount è 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'animale ourAnimals domestico dalla matrice, è possibile ridurre petCount di 1. 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'ambito petCount a livello di applicazione anche se non lo si usa altrove. Dopo tutto, definire l'ambito petCount a 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 usare petCount in modo più ampio all'interno dell'applicazione, è possibile aggiornare il codice per definire l'ambito petCounta un livello superiore. Ricordarsi di mantenere l'ambito delle variabili il più piccolo possibile e aumentare il proprio ambito solo quando diventa necessario.

  5. 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 for ciclo ogni volta che iteri su la ourAnimals matrice.

  6. 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 if ogni volta che controlli se le caratteristiche degli animali da compagnia sono state assegnate.

  7. All'interno del blocco di codice dell'oggetto if creato, per incrementare petCount di 1, immettere il codice seguente:

    petCount += 1;
    
  8. Dedicare un attimo a esaminare il ciclo for completato.

    Il ciclo completato for dovrebbe 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 ourAnimals dati assegnati. Quando trova un animale con dati assegnati, incrementa petCounter.

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

  10. 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.

  11. 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 utilizza anotherPet più 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.

  12. 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.

  1. In una riga di codice vuota sotto il for ciclo creato, per verificare se petCount è minore di maxPets, immettere il codice seguente:

    if (petCount < maxPets)
    {
    }
    
  2. 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.

  3. Dedicare un attimo a esaminare il ramo di codice case "2": dell'istruzione switch.

    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;
    
  4. Scegliere Salva dal menu File di Visual Studio Code.

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

  6. Correggere eventuali errori di compilazione segnalati prima di continuare.

    Anche in questo caso, è possibile ignorare il messaggio di avviso relativo al fatto che anotherPet viene assegnato ma mai utilizzato. Nell'attività successiva, inizierai a costruire il while ciclo usato per immettere i dati per uno o più animali domestici. L'espressione creata per il while ciclo userà anotherPet e questo messaggio di avviso verrà eliminato.

    Tenere presente che i messaggi di avviso sono aspetti da preoccuparsi, ma non impediscono l'esecuzione del programma.

  7. 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 non genera un errore di runtime, il menu principale dell'app dovrebbe ora essere visualizzato nel pannello Terminale.

  8. Al prompt dei comandi del terminale immettere 2

    Questo valore corrisponde al ramo di codice case "2":.

  9. 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.

  10. Al prompt dei comandi del terminale premere INVIO per continuare a eseguire l'applicazione.

  11. 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.

  1. Nell'editor di codice creare una riga di codice vuota sotto il if (petCount < maxPets) blocco di codice.

  2. Per iniziare il processo di creazione del nuovo while ciclo, immettere il codice seguente:

    while (anotherPet == "y" && petCount < maxPets)
    {
    }
    
  3. Scegliere Salva dal menu File di Visual Studio Code.

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

  5. 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 .

  1. Creare una riga di codice vuota all'interno del blocco di codice del while (anotherPet == "y" && petCount < maxPets) ciclo creato nell'attività precedente.

  2. 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;
    
  3. Per verificare se petCount è minore di maxPets, immettere il codice seguente:

    // check maxPet limit
    if (petCount < maxPets)
    {
    }
    
  4. All'interno del blocco di codice dell'istruzione if creata, 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)");
    
  5. 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");
    
  6. Individua l'istruzione break che separa case "2"; da case "3"; nella tua istruzione switch.

  7. Nota le istruzioni Console.WriteLine() e Console.ReadLine() alla fine del nostro codice case "2";.

    Questo codice visualizza un messaggio all'utente e quindi sospende l'applicazione.

  8. Per racchiudere le istruzioni Console.WriteLine() e Console.ReadLine() all'interno di un'istruzione if, 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 petCount viene incrementato all'interno del while ciclo. Se petCount è uguale a maxPets, non è possibile aggiungere altri animali domestici alla ourAnimals matrice. È consigliabile informare l'utente quando si verifica questo problema.

  9. 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":
    
  10. Dedicare un attimo a esaminare il codice nel ciclo while e 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();
    }
    
  11. Scegliere Salva dal menu File di Visual Studio Code.

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

  13. 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.

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

  2. Al prompt dei comandi del terminale immettere dotnet run

  3. Al prompt dei comandi del terminale immettere 2

  4. 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)
    
  5. Al prompt dei comandi del terminale immettere n

  6. 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 while ciclo quando l'utente immette "n". Salvare le modifiche, ricompilare il programma ed eseguire il test di verifica per tornare a questo punto.

  7. 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)
    
  8. Al prompt dei comandi del terminale immettere y

  9. Prenditi un minuto per considerare come petCount viene 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 petCount e maxPets. Si sa che maxPets viene assegnato un valore di 8, ma che ne dici di petCount? Gli elementi seguenti consentono di valutare la logica implementata:

    • Si sa che petCount è 4 quando si immette la prima iterazione del while ciclo.

    • Sai che petCount viene incrementato ogni volta che il ciclo while esegue un'iterazione.

    • Si sa che il valore assegnato a petCount e il modo in cui petCount viene incrementato influiscono sulla modalità di archiviazione dei dati nella ourAnimals matrice. Gli elementi seguenti illustrano la relazione tra petCount e i dati archiviati in ourAnimals:

      • L'applicazione aggiunge quattro animali domestici alla ourAnimals matrice quando crea i dati di esempio.
      • L'applicazione archivia nuovi dati nella ourAnimals matrice quando il valore di petCount è 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'animale 1 e ourAnimals[3,0] contiene l'ID dell'animale domestico per l'animale 4. Pertanto, quando petCount4 si 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 petCount prima 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 su 5.
    • 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" e petCount < maxPets.
      • Il valore assegnato a petCount verrà incrementato (quando il ciclo while esegue l'iterazione).
      • Il valore assegnato a petCount sarà 6 (dopo che l'utente immette y la prima volta).

    Tenere presente questa analisi della logica del codice mentre si continua a testare l'applicazione.

  10. Si noti che il pannello Terminale viene aggiornato con lo stesso messaggio "un altro animale domestico?", ma il codice non visualizza petCount aggiornato.

    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)
    
  11. Al prompt dei comandi del terminale immettere y

    Quando si immette y una seconda volta, petCount viene incrementato a 7. Quindi petCount è ancora minore di maxPets

  12. Al prompt dei comandi del terminale immettere y

    Quando si immette y una terza volta, petCount viene incrementato a 8. Quindi petCount ora è uguale a maxPets

  13. Verificare che il codice esce dal while ciclo 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 petCount raggiunge un valore uguale a maxPets. Continuare a rispondere a "y" finché non si sa che petCount è uguale a maxPets, che ha un valore predefinito di 8.

  14. Al prompt dei comandi del terminale premere INVIO per continuare a eseguire l'applicazione.

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