Esercizio - Completare un'attività di sfida per distinguere le istruzioni di iterazione do e while

Completato

Le sfide di scrittura di codice consentiranno di consolidare i concetti appresi e di acquisire una maggiore confidenza prima di procedere.

Esaminare la differenza tra le iterazioni delle istruzioni do e while

Come si è visto, C# supporta quattro tipi di istruzioni di iterazione: for, foreach, do-while e while. La documentazione di riferimento del linguaggio Microsoft descrive queste istruzioni come segue:

  • L'istruzione for esegue il corpo fino a quando un'espressione booleana specificata (la “condizione”) restituisce true.
  • L'istruzione foreach enumera gli elementi di una raccolta ed esegue il relativo corpo per ogni elemento della raccolta.
  • L'istruzione do-while esegue in modo condizionale il relativo corpo una o più volte.
  • L'istruzione while esegue in modo condizionale il relativo corpo zero o più volte.

Le iterazioni for e foreach sembrano essere chiaramente differenziate tra loro e dalle iterazioni do-while e while. Le definizioni per le istruzioni do-while e while, tuttavia, sembrano essere molto simili. La scelta tra do-while e while sembra più arbitraria e può anche creare un po' di confusione. Alcuni progetti di sfida possono essere utili per chiarire le differenze.

In questo test verranno presentate le condizioni di tre diversi progetti di codifica. Per ogni progetto verrà richiesto di implementare un blocco di codice di iterazione usando un'istruzione do-while o while. Sarà necessario valutare le condizioni specificate per scegliere tra le istruzioni do-while e while. È possibile cambiare dopo l'avvio se la prima scelta non funziona come previsto.

Nota

Le condizioni per il progetto di scrittura del codice possono essere usate per facilitare la scelta tra le istruzioni do-while e while. Ciò che si sa, o non si sa, sull'espressione booleana che verrà valutata può talvolta essere utile per scegliere tra le istruzioni do-while e while. In questo esercizio di sfida, le condizioni del progetto includono le informazioni che verranno usate per costruire l'espressione booleana.

Gestire l'input dell'utente durante questa sfida

Quando si usa un'istruzione Console.ReadLine() per ottenere l'input dell'utente, è pratica comune usare una stringa di tipo nullable (designata string?) per la variabile di input e quindi valutare il valore immesso dall'utente. Il codice di esempio che segue usa una stringa di tipo nullable per acquisire l’input dell'utente. L'iterazione continua mentre il valore fornito dall'utente è Null:

string? readResult;
Console.WriteLine("Enter a string:");
do
{
    readResult = Console.ReadLine();
} while (readResult == null);

L'espressione booleana valutata dall'istruzione while può essere usata per garantire che l'input dell'utente soddisfi un requisito specificato. Ad esempio, se un prompt chiede all'utente di immettere una stringa che includa almeno tre caratteri, è possibile usare il codice seguente:

string? readResult;
bool validEntry = false;
Console.WriteLine("Enter a string containing at least three characters:");
do
{
    readResult = Console.ReadLine();
    if (readResult != null)
    {
        if (readResult.Length >= 3)
        {
            validEntry = true;
        }
        else
        {
            Console.WriteLine("Your input is invalid, please try again.");
        }
    }
} while (validEntry == false);

Se si vuole usare l'input Console.ReadLine() per i valori numerici, è necessario convertire il valore stringa in un tipo numerico.

Per convertire un valore stringa in un numero intero, è possibile usare il metodo int.TryParse(). Il metodo usa due parametri, una stringa che verrà valutata e il nome di una variabile intera a cui verrà assegnato un valore. Il metodo restituisce un valore booleano. L'esempio di codice seguente illustra l'uso del metodo int.TryParse():

// capture user input in a string variable named readResult

int numericValue = 0;
bool validNumber = false;

validNumber = int.TryParse(readResult, out numericValue);

Se il valore stringa assegnato a readResult rappresenta un numero intero valido, il valore verrà assegnato alla variabile intera denominata numericValue e il valore true verrà assegnato alla variabile booleana denominata validNumber. Se il valore assegnato a readResult non rappresenta un numero intero valido, a validNumber verrà assegnato un valore pari a false. Ad esempio, se readResult è uguale a "7", il valore 7 verrà assegnato a numericValue.

Progetto di scrittura del codice 1 - Scrivere codice che convalida l'input di un valore intero

Ecco le condizioni che deve implementare il primo progetto di scrittura del codice:

  • La soluzione deve includere un'iterazione do-while o while.

  • Prima del blocco di iterazione: la soluzione deve usare un'istruzione Console.WriteLine() per richiedere all'utente un valore intero compreso tra 5 e 10.

  • All'interno del blocco di iterazione:

    • La soluzione deve usare un'istruzione Console.ReadLine() per ottenere l'input dall'utente.
    • La soluzione deve assicurarsi che l'input sia una rappresentazione valida di un numero intero.
    • Se il valore intero non è compreso tra 5 e 10, il codice deve usare un'istruzione Console.WriteLine() per richiedere all'utente un valore intero compreso tra 5 e 10.
    • La soluzione deve assicurarsi che il valore intero sia compreso tra 5 e 10 prima di uscire dall'iterazione.
  • Sotto (dopo) il blocco di codice di iterazione: la soluzione deve usare un'istruzione Console.WriteLine() per informare l'utente che il valore di input è stato accettato.

  1. Assicurarsi che in Visual Studio Code sia aperto un file Program.cs vuoto.

    Se necessario, aprire Visual Studio Code, quindi completare la procedura seguente per preparare un file Program.cs nell'editor:

    1. Nel menu File selezionare Apri cartella.

    2. Usare la finestra di dialogo Apri cartella per passare alla cartella CsharpProjects e quindi aprila.

    3. Nel pannello ESPLORA RISORSE di Visual Studio Code, selezionare Program.cs.

    4. Nel menu Selezione di Visual Studio Code selezionare Seleziona tutto e quindi premere CANC.

  2. Scrivere il codice che implementa ogni condizione per il progetto di codice 1.

  3. Eseguire l'applicazione e verificare che il codice convalidi l'input dell'utente in base ai requisiti specificati.

    Ad esempio, quando si esegue l'applicazione, deve rifiutare valori di input come "due" e "2", ma deve accettare un valore di input "7".

    Per l'esempio descritto in precedenza, l'output della console dovrebbe essere simile al seguente:

    Enter an integer value between 5 and 10
    two
    Sorry, you entered an invalid number, please try again
    2
    You entered 2. Please enter a number between 5 and 10.
    7
    Your input value (7) has been accepted.
    

Progetto di scrittura del codice 2 - Scrivere codice che convalida la stringa di input

Ecco le condizioni che deve implementare il secondo progetto di scrittura del codice:

  • La soluzione deve includere un'iterazione do-while o while.

  • Prima del blocco di iterazione: la soluzione deve usare un'istruzione Console.WriteLine() per richiedere all'utente uno dei tre nomi di ruolo: Amministratore, Manager o Utente.

  • All'interno del blocco di iterazione:

    • La soluzione deve usare un'istruzione Console.ReadLine() per ottenere l'input dall'utente.
    • La soluzione deve assicurarsi che il valore immesso corrisponda a una delle tre opzioni di ruolo.
    • La soluzione deve usare il metodo Trim() sul valore di input per ignorare gli spazi iniziali e finali.
    • La soluzione deve usare il metodo ToLower() sul valore di input per ignorare la distinzione tra maiuscole e minuscole.
    • Se il valore immesso non corrisponde a una delle opzioni di ruolo, il codice deve usare un'istruzione Console.WriteLine() per richiedere all'utente una voce valida.
  • Sotto (dopo) il blocco di codice di iterazione: la soluzione deve usare un'istruzione Console.WriteLine() per informare l'utente che il valore di input è stato accettato.

  1. Impostare come commento tutto il codice nel pannello Editor di Visual Studio Code

    1. Selezionare tutte le righe di codice nell'editor di codice
    2. Scegliere Attiva/Disattiva commento per il blocco dal menu Modifica.
  2. Scrivere il codice che implementa ogni condizione per il progetto di codice 2.

  3. Eseguire l'applicazione e verificare che il codice convalidi l'input dell'utente in base ai requisiti specificati.

    Ad esempio, quando viene eseguita, l'applicazione deve rifiutare valori di input come "Ammin", ma deve accettare un valore di input "amministratore".

    L'output della console per questo esempio dovrebbe essere simile al seguente:

    Enter your role name (Administrator, Manager, or User)
    Admin
    The role name that you entered, "Admin" is not valid. Enter your role name (Administrator, Manager, or User)
       Administrator
    Your input value (Administrator) has been accepted.
    

Progetto di codice 3 - Scrivere il codice che elabora i contenuti di una matrice di stringhe

Ecco le condizioni che deve implementare il terzo progetto di scrittura del codice:

  • La soluzione deve usare la matrice di stringhe seguente per rappresentare l'input per la logica di scrittura del codice:

    string[] myStrings = new string[2] { "I like pizza. I like roast chicken. I like salad", "I like all three of the menu choices" };
    
  • La soluzione deve dichiarare una variabile intera denominata periodLocation che può essere usata per contenere la posizione del carattere punto all'interno di una stringa.

  • La soluzione deve includere un ciclo esterno foreach o for che può essere usato per elaborare ogni elemento stringa nella matrice. La variabile stringa che verrà elaborata all'interno dei cicli deve essere denominata myString.

  • Nel ciclo esterno la soluzione deve usare il metodo IndexOf() della classe String per ottenere la posizione del primo carattere punto nella variabile myString. La chiamata al metodo deve essere simile a: myString.IndexOf("."). Se la stringa non è include alcun carattere punto, verrà restituito il valore -1.

  • La soluzione deve includere un ciclo interno do-while o while che può essere usato per elaborare la variabile myString.

  • Nel ciclo interno la soluzione deve estrarre e visualizzare (scrivere nella console) ogni frase contenuta in ognuna delle stringhe elaborate.

  • Nel ciclo interno la soluzione non deve visualizzare il carattere punto.

  • Nel ciclo interno la soluzione deve usare i metodi Remove(), Substring() e TrimStart() per elaborare le informazioni della stringa.

  1. Impostare come commento tutto il codice nel pannello Editor di Visual Studio Code

    1. Selezionare tutte le righe di codice nell'editor di codice
    2. Scegliere Attiva/Disattiva commento per il blocco dal menu Modifica.
  2. Scrivere il codice che implementa ogni condizione elencata per il progetto di codice 3.

  3. Eseguire l'applicazione e verificare che l'output soddisfi i requisiti.

    Se la logica del codice funziona correttamente, l'output dovrebbe essere simile al seguente:

    I like pizza
    I like roast chicken
    I like salad
    I like all three of the menu choices
    

Se non si riesce a procedere e occorre leggere la soluzione o se la sfida è stata completata correttamente, andare avanti per visualizzare i progetti di soluzione per questa sfida.