Delineare la soluzione da implementare rispetto all'attività di sfida

Completato

Gli esempi seguenti devono usare un oggetto do perché si sa che è necessario eseguire il blocco di codice almeno una volta. È anche POSSIBILE usare un oggetto while per ottenere lo stesso risultato. Alcuni sviluppatori ritengono che la logica di un oggetto while renda il codice più leggibile. Se questo è il caso, si può scegliere di implementare un oggetto while. In questo caso, tenere presente che la maggior parte dei compilatori di codice ottimizza il codice convertendo l'istruzione di iterazione in un oggetto do-while.

Codice progetto 1

Il codice seguente rappresenta una possibile soluzione alla sfida del progetto 1 dell'unità precedente.

Il codice usa un'istruzione do perché il blocco di codice deve essere eseguito almeno una volta. È anche POSSIBILE usare un oggetto while per ottenere lo stesso risultato. Alcuni sviluppatori potrebbero ritenere che la logica di un oggetto while renda il codice più leggibile. In questo caso, è possibile scegliere di implementare un'istruzione while qui.

string? readResult;
string valueEntered = "";
int numValue = 0;
bool validNumber = false;

Console.WriteLine("Enter an integer value between 5 and 10");

do
{
    readResult = Console.ReadLine();
    if (readResult != null) 
    {
        valueEntered = readResult;
    }

    validNumber = int.TryParse(valueEntered, out numValue);

    if (validNumber == true)
    {
        if (numValue <= 5 || numValue >= 10)
        {
            validNumber = false;
            Console.WriteLine($"You entered {numValue}. Please enter a number between 5 and 10.");
        }
    }
    else 
    {
        Console.WriteLine("Sorry, you entered an invalid number, please try again");
    }
} while (validNumber == false);

Console.WriteLine($"Your input value ({numValue}) has been accepted.");

readResult = Console.ReadLine();

Codice progetto 2

Il codice seguente rappresenta una possibile soluzione alla sfida del progetto 2 dell'unità precedente.

Il codice usa un'istruzione do perché il blocco di codice deve essere eseguito almeno una volta. È anche POSSIBILE usare un oggetto while per ottenere lo stesso risultato. Alcuni sviluppatori potrebbero ritenere che la logica di un oggetto while renda il codice più leggibile. In questo caso, è possibile scegliere di implementare un'istruzione while qui.

string? readResult;
string roleName = "";
bool validEntry = false;

do
{                
    Console.WriteLine("Enter your role name (Administrator, Manager, or User)");
    readResult = Console.ReadLine();
    if (readResult != null) 
    {
        roleName = readResult.Trim();
    }

    if (roleName.ToLower() == "administrator" || roleName.ToLower() == "manager" || roleName.ToLower() == "user") 
    {
        validEntry = true;
    }
    else
    {
        Console.Write($"The role name that you entered, \"{roleName}\" is not valid. ");
    }

} while (validEntry == false);

Console.WriteLine($"Your input value ({roleName}) has been accepted.");
readResult = Console.ReadLine();

Codice progetto 3

Il codice seguente rappresenta una possibile soluzione alla sfida del progetto 3 dell'unità precedente.

Il codice usa un'istruzione for per il ciclo esterno perché non è possibile modificare il valore assegnato a una 'variabile di iterazione foreach'. Questo problema potrebbe essere risolto dichiarando una variabile stringa aggiuntiva all'interno del ciclo foreach, ma in questo modo si aggiungerebbe una complessità indesiderata alla logica del codice. In altre parole, l'uso della dichiarazione di iterazione foreach (string myString in myStrings) e il successivo tentativo di elaborazione della variabile myString genererà un errore di compilazione.

Il codice utilizza un'istruzione while nel ciclo interno perché, in base al valore della stringa di dati, il blocco di codice potrebbe non essere eseguito (nel caso in cui la stringa non contenga un punto). Non è consigliabile usare un'istruzione do in situazioni in cui il blocco di iterazione potrebbe non essere eseguito.

string[] myStrings = new string[2] { "I like pizza. I like roast chicken. I like salad", "I like all three of the menu choices" };
int stringsCount = myStrings.Length;

string myString = "";
int periodLocation = 0;

for (int i = 0; i < stringsCount; i++)
{
    myString = myStrings[i];
    periodLocation = myString.IndexOf(".");

    string mySentence;

    // extract sentences from each string and display them one at a time
    while (periodLocation != -1)
    {

        // first sentence is the string value to the left of the period location
        mySentence = myString.Remove(periodLocation);

        // the remainder of myString is the string value to the right of the location
        myString = myString.Substring(periodLocation + 1);

        // remove any leading white-space from myString
        myString = myString.TrimStart();

        // update the comma location and increment the counter
        periodLocation = myString.IndexOf(".");

        Console.WriteLine(mySentence);
    }
 
    mySentence = myString.Trim();
    Console.WriteLine(mySentence);
}

Se hai successo, congratulazioni! In caso di problemi, esaminare la soluzione e provare a capire come funziona.