Passer en revue la solution à l’activité de défi impliquant do et while

Effectué

Les exemples suivants doivent utiliser do, car vous savez que vous devez exécuter le bloc de code au moins une fois. Vous pouvez également utiliser un while pour obtenir le même résultat. Certains développeurs estiment que la logique d’une instruction while rend le code plus lisible. Si vous partagez ce sentiment, vous pouvez choisir d’implémenter une instruction while. Dans ce cas, n’oubliez pas que la plupart des compilateurs de code optimisent votre code pour vous en convertissant l’instruction d’itération en do-while.

Code du projet 1

Le code suivant est une solution possible au projet 1 proposé en guise de défi dans l’unité précédente.

Le code utilise une instruction do, car le bloc de code doit être exécuté au moins une fois. Vous pouvez également utiliser un while pour obtenir le même résultat. Certains développeurs estiment que la logique d’une instruction while rend le code plus lisible. Si vous partagez ce sentiment, vous pouvez choisir d’implémenter une instruction while ici.

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();

Code du projet 2

Le code suivant est une solution possible au projet 2 proposé en guise de défi dans l’unité précédente.

Le code utilise une instruction do, car le bloc de code doit être exécuté au moins une fois. Vous pouvez également utiliser un while pour obtenir le même résultat. Certains développeurs estiment que la logique d’une instruction while rend le code plus lisible. Si vous partagez ce sentiment, vous pouvez choisir d’implémenter une instruction while ici.

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();

Code du projet 3

Le code suivant est une solution possible au projet 3 proposé en guise de défi dans l’unité précédente.

Le code utilise une instruction for pour la boucle externe, car vous ne pouvez pas modifier la valeur affectée à une variable d’itération foreach. Vous pouvez contourner ce problème en déclarant une variable de chaîne supplémentaire à l’intérieur de la boucle foreach, mais vous ajouteriez alors une complexité indésirable à la logique de votre code. En d’autres termes, vous obtenez une erreur de compilation lorsque vous utilisez l’instruction d’itération foreach (string myString in myStrings) et que vous tentez ensuite de traiter la variable myString.

Le code utilise une instruction while pour la boucle interne car, selon la valeur de la chaîne de données, le bloc de code peut ne pas être exécuté (quand la chaîne ne contient pas de point). Vous ne devez pas utiliser une instruction do dans les situations où le bloc d’itération n’a peut-être pas besoin d’être exécuté.

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);
}

Si vous avez réussi, félicitations ! Si vous avez rencontré des difficultés, prenez le temps de revoir la solution et essayez de comprendre comment elle fonctionne.