Revisión de la solución de la actividad de desafío de do en comparación con while

Completado

En los ejemplos siguientes se debe usar un do porque sabe que necesita ejecutar el bloque de código al menos una vez. También PUEDE usar while para lograr el mismo resultado. Algunos desarrolladores sienten que la lógica de while hace que el código sea más legible. Si es su caso, puede optar por implementar un while. En este caso, tenga en cuenta que la mayoría de los compiladores de código optimizarán el código automáticamente mediante la conversión de la instrucción de iteración en un do-while.

Código del Proyecto 1

El código siguiente es una posible solución para el desafío que plantea el Proyecto 1 de la unidad anterior.

El código usa una instrucción do porque el bloque de código debe ejecutarse al menos una vez. También PUEDE usar while para lograr el mismo resultado. Algunos desarrolladores pueden pensar que la lógica de while hace que el código sea más legible. Si es así, puede optar por implementar una instrucción while aquí.

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

Código del Proyecto 2

El código siguiente es una posible solución para el desafío que plantea el Proyecto 2 de la unidad anterior.

El código usa una instrucción do porque el bloque de código debe ejecutarse al menos una vez. También PUEDE usar while para lograr el mismo resultado. Algunos desarrolladores pueden pensar que la lógica de while hace que el código sea más legible. Si es así, puede optar por implementar una instrucción while aquí.

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

Código del Proyecto 3

El código siguiente es una posible solución para el desafío que plantea el Proyecto 3 de la unidad anterior.

El código usa una instrucción for para el bucle externo porque no se puede modificar el valor asignado a una variable de iteración "foreach". Para solucionarlo declare una variable de cadena adicional en el bucle foreach, pero si lo hace, agregará una complejidad no deseada a la lógica del código. En otras palabras, si se usa la instrucción de iteración foreach (string myString in myStrings) y, luego, se intenta procesar la variable myString, se genera un error de compilación.

El código usa una instrucción while para el bucle interno porque, dependiendo del valor de la cadena de datos, es posible que el bloque de código no se ejecute (si la cadena no contiene un punto). No debe usar una instrucción do en situaciones en las que es posible que no sea necesario ejecutar el bloque de iteración.

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 ha sido así, enhorabuena. Si tiene problemas, tómese el tiempo necesario para examinar la solución e intente comprender su funcionamiento.