No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Ciclos While y Do While

16/20
Recursos

Aportes 31

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Otra forma para validar si el usuario escribe, sin colocar las combinaciones de escribirlo, pueden ser que colocando el resultado que recibes en mayuscula o minuscula. Algo ocmo
resultado.toUpper() o resultado.toLower(), respectivamente

CICLOS WHILE Y DO WHILE

La instrucción while ejecuta una instrucción o un bloque de instrucciones mientras que una expresión booleana especificada se evalúa como true. Como esa expresión se evalúa antes de cada ejecución del bucle, un bucle while se ejecuta cero o varias veces. La while instrucción difiere de un bucle do , que se ejecuta una o varias veces.

En el ejemplo siguiente se muestra el uso de la instrucción while:

int n = 0;
while (n < 5)
{
    Console.Write(n);
    n++;
}
// Output:
// 01234

La estructura do while es otra estructura repetitiva, la cual ejecuta al menos una vez su bloque repetitivo, a diferencia del while o del for que podían no ejecutar el bloque.
Esta estructura repetitiva se utiliza cuando conocemos de antemano que por lo menos una vez se ejecutará el bloque repetitivo.
La condición de la estructura está abajo del bloque a repetir, a diferencia del while o del for que está en la parte superior.

El bloque de operaciones se repite MIENTRAS que la condición sea Verdadera.

Si la condición retorna Falso el ciclo se detiene. En C#, todos los ciclos repiten por verdadero y cortan por falso.
Es importante analizar y ver que las operaciones se ejecutan como mínimo una vez.

Ejemplos de uso de la estructura de iteracion WHILE:

Estructura repetitiva do while

La estructura do while es otra estructura repetitiva, la cual ejecuta al menos una vez su bloque repetitivo, a diferencia del while o del for que podían no ejecutar el bloque.

Esta estructura repetitiva se utiliza cuando conocemos de antemano que por lo menos una vez se ejecutará el bloque repetitivo.
La condición de la estructura está abajo del bloque a repetir, a diferencia del while o del for que está en la parte superior.

El bloque de operaciones se repite MIENTRAS que la condición sea Verdadera.

Si la condición retorna Falso el ciclo se detiene. En C#, todos los ciclos repiten por verdadero y cortan por falso.
Es importante analizar y ver que las operaciones se ejecutan como mínimo una vez.

Ejemplos de uso y funcionamiento de DO WHILE:

se da mucha vuelta en la expicación de un do while, ir haciendolo paso por paso complica su entendimiento, debe comenzar por la estructura,
do
{

} while();
y después como funciona, a decir verdad el while tampoco lo comprendí, aunque ya tengo tiempo programando y puedo rellenar lo que me falta a prueba y error

el dealer es el de la droga, el de las cartas es el crupier,
apuesto que vive en Sinaloa

Ventajas y desventajas de usar while
Ventajas

  • Flexibilidad: El bucle while permite realizar iteraciones de acuerdo a una condición específica, lo que proporciona flexibilidad en la ejecución del código. Esto significa que puedes repetir un bloque de código mientras se cumpla una determinada condición.

  • Sencillez: El bucle while es relativamente sencillo de entender y utilizar. Solo requiere una condición de salida y el bloque de código a ejecutar mientras se cumpla esa condición.

  • Adaptabilidad: El bucle while se puede utilizar en una amplia variedad de situaciones y para diferentes tipos de condicionales . Puedes establecer cualquier tipo de condición que desees , siempre y cuando pueda evaluarse como verdadera o falsa.

  • Control de flujo: El bucle while te permite tener un mayor control sobre el flujo de ejecución de tu programa. Puedes decidir cuándo y bajo qué condiciones se repite un bloque de código, lo que te da mayor precisión en el control de los procesos.

Desventajas

  • Posibilidad de bucles infinitos: Si no se establece correctamente una condición de salida, es posible que el bucle while se ejecute infinitamente, lo que puede llevar a un bloqueo del programa o un consumo excesivo de recursos.

  • Complejidad en el manejo de variables de control: Al utilizar un bucle while, es necesario asegurarse de que las variables de control se actualicen correctamente dentro del bloque de código. Si no se actualizan de manera adecuada, se puede producir un bucle infinito o un comportamiento inesperado.

  • Menor legibilidad en comparación con otros bucles: A veces, el bucle while puede resultar menos legible que otros bucles, como el bucle for. Esto se debe a que la condición de salida se establece fuera del bucle y puede ser más difícil de seguir para otros desarrolladores.

Aquí mi versión de blackjack 😁
Mejoren mi aporte y me comparten el código para ver de que otra forma se puede hacer mejor. Saludos!!!

int jugador = 0;
int cartasJugador = 0;
int puntosJugador = 0;
int maquina = 0;
int puntosMaquina = 0;
string mensaje = "";
string salir = "";

Random random = new Random();

Console.WriteLine("Welcome to C A S I N O!");
Console.WriteLine("¡Vamos a jugar al Blackjack!");

Console.WriteLine("Puedes solicitar entre 1 y mas cartas.");
Console.WriteLine("Si la suma de tus cartas se pasa de 21, habrás perdido.");
Console.WriteLine("¿Estás listo?");
Console.WriteLine("Mucha suerte!");

while (puntosJugador <= 21)
{
    Console.WriteLine("¿Cuántas cartas quieres?");
    cartasJugador = Convert.ToInt32(Console.ReadLine());

    for (int i = 0; i < cartasJugador; i++)
    {
        jugador = random.Next(1, 11); // Genera valores entre 1 y 10
        puntosJugador += jugador;
    }

    if (puntosJugador < 21)
    {
        Console.WriteLine($"Tienes {puntosJugador} puntos con {cartasJugador} cartas.");

        Console.WriteLine("¿Deseas parar con las cartas que tienes?");
        Console.WriteLine("Escribe 'si' para parar o cualquier otra tecla para continuar.");

        salir = Console.ReadLine();

        if (salir == "si")
        {
            break;
        }
    }
}

while (puntosMaquina <= 17)
{
    maquina = random.Next(1, 11); // Genera valores entre 1 y 10
    puntosMaquina += maquina;
}

Console.WriteLine($"Tus puntos son: {puntosJugador}");

if (puntosJugador > 21)
{
    mensaje = "Perdiste. Te pasaste de 21 puntos.\n";
}
else if (puntosJugador > puntosMaquina)
{
    mensaje = "¡Felicitaciones! Ganaste.\n";
}
else if (puntosMaquina > puntosJugador)
{
    mensaje = "Perdiste. El casino ganó.\n";
}
else
{
    mensaje = "Empate. La casa gana!\n";
}

mensaje += $"Tus puntos son: {puntosJugador}\n";
mensaje += $"Los puntos del casino son: {puntosMaquina}";

Console.WriteLine(mensaje);

La declaración de random se hace antes del loop (do) para que no se ejecute la creación del objeto en cada iteración

en black jack los números de las cartas se contabilizan normal y las letras “J”, “Q” and “K” son equivalentes a 10 y la A puede ser 1 or 11 por eso un A con letra es black jack porque 11 + 10 = 21

C# y JS me parecen muy similares..

Aplicando lo aprendido

using System;

var (totalJugador, totalDealer, num) = (0, 0, 0);
string message = string.Empty;
string switchControl = "menu";
int sigueJugando = 0;

/* Blackjack, Juntar 21 pidiendo, en caso de pasaswte de 21 pierdes.
cartas o en caso de tener menos
de 21 igual tener mayor puntuación que el dealer */

while (true)
{

    switch (switchControl)
    {
        case "menu":
            Console.WriteLine("Welcome al *** C A S I N O ***");
            Console.WriteLine("Escriba '21' para jugar 21");
            switchControl = Console.ReadLine();
            break;

        case "21":
            System.Random random = new System.Random();
            totalDealer = random.Next(1, 21);
            do
            {
                
                num = random.Next(1, 12);
                totalJugador = totalJugador + num;
                Console.WriteLine("Toma tu carta jugador");
                Console.WriteLine($"Te salió el número: {num}");
                Console.WriteLine("Deseas seguir jugando?");
                Console.WriteLine("1-> Si");
                Console.WriteLine("2-> No");
                sigueJugando = Convert.ToInt32(Console.ReadLine());
            }
            while (sigueJugando == 1 );
            if (totalJugador < 1 || totalJugador > 21) 
            {
                message = "Total jugador no puede ser menor que 1 o mayor a 21";
                switchControl = "menu";
            }                
            else if (totalDealer < 1 || totalDealer > 21) 
            {
                message = "Total dealer no puede ser menor que 1 o mayor a 21";
                switchControl = "menu";
            }                
            else
            {
                if (totalJugador > totalDealer) 
                {
                    message = "Felicidades, venciste al dealer";
                    switchControl = "menu";
                }                    
                else if (totalJugador <= totalDealer) 
                {
                    message = "Lo siento!... Perdiste vs el dealer";
                    switchControl = "menu";
                }
                else 
                {
                    message = "Condición no válida";
                    switchControl = "menu";
                }                    
            }
            Console.WriteLine($"Total jugador {totalJugador}");
            Console.WriteLine($"Total dealer {totalDealer}");
            Console.WriteLine(message);
            break;
        default:
            Console.WriteLine("Valor ingresado no valido en el *** C A S I N O ***");
            switchControl = "menu";
            break;

    }
}

🔴 La diferencia principal es cuándo se verifica la condición:

✋En while, la condición se verifica antes de ejecutar el bloque de código.

✋En do-while, el bloque de código se ejecuta al menos una vez antes de verificar la condición. Esto puede ser útil cuando deseas que el bloque de código se ejecute al menos una vez, independientemente de la condición.

aqui esta mi código hay medio solucione el problema sin ir a la siguiente clase ![](https://static.platzi.com/media/user_upload/image-e8bfb4bd-893d-4909-95b1-dc6f8c108857.jpg)![](https://static.platzi.com/media/user_upload/image-569da0fd-3534-4216-9b79-ced3207c49f8.jpg)
### `while` Loop ### * **Funcionamiento**: Evalúa la condición antes de ejecutar el bloque de código. Si la condición es `false` desde el principio, el bloque de código no se ejecutará ni una sola vez. ### ### `do-while` Loop ### * **Funcionamiento**: Ejecuta el bloque de código al menos una vez antes de evaluar la condición. Luego, sigue ejecutando el bloque mientras la condición sea `true`. ### Diferencia Clave * `while`: Puede que nunca ejecute el bloque de código si la condición es `false` desde el principio. * `do-while`: Siempre ejecuta el bloque de código al menos una vez, independientemente de si la condición es `false` desde el principio.
Interesante. ```js System.Random random = new System.Random(); int Jugador_C = 0; int Num = 0; string Jugar = "Si"; string salir=""; bool Desidir; switch (Jugar) { case "Si": Console.WriteLine("CASINO tu dinero "); Console.WriteLine("TOMA UNA CARTA Y POSIBLEMENTE MI DINERO\n "+ " Di que si"); Jugar = Console.ReadLine(); if (Jugar=="Si") { do { Num= random.Next(1,12); Jugador_C = Jugador_C + Num; if (Jugador_C > 21){ Console.WriteLine("Perdiste tu dinero"); Desidir = false; Jugar = "no"; } else if (Jugador_C < 21) { Console.WriteLine("Tu carta es " + Num); Console.WriteLine("Total " + Jugador_C); Console.WriteLine("Quieres ortra carta?"); salir = Console.ReadLine(); } else{Console.WriteLine("Quieres salir?");salir = Console.ReadLine();} if (salir == "Si"){Desidir = true;Console.WriteLine("P1?");} else {Console.WriteLine("P3?"); Jugar = "no";Desidir = false;}; } while (Desidir); }; break; default: Console.WriteLine("Miedoso "); break; } ```
Comparto una calculadora básica, con el ciclo Do - While para repetir la operación: ```c# { class Program { static void Main(string[] args) { string repetir; int operacion; do { Console.WriteLine("Seleccione la operacion que desea realizar:"); Console.WriteLine("1 - Sumar"); Console.WriteLine("2 - Restar"); Console.WriteLine("3 - Multiplicar"); Console.WriteLine("4 - Dividir"); Console.WriteLine(" "); operacion = int.Parse(Console.ReadLine()); Calcular(operacion); Console.WriteLine("****************************"); Console.WriteLine("¿Desea realizar otro cálculo?"); Console.WriteLine("1 = Si"); Console.WriteLine("2 = No"); repetir = Console.ReadLine(); if (repetir == "1" || repetir == "SI" || repetir == "Si" || repetir == "si") { Console.Clear(); } } while (repetir == "1" || repetir == "SI" || repetir == "Si" || repetir == "si"); Console.WriteLine("Presione una tecla para salir"); Console.ReadKey(); } private static void Calcular(int operacion) { Console.Clear(); switch (operacion) { case 1: { Console.WriteLine("SUMAR"); Console.WriteLine(""); CalcularRespuesta(operacion); break; } case 2: { Console.WriteLine("RESTAR"); Console.WriteLine(""); CalcularRespuesta(operacion); break; } case 3: { Console.WriteLine("MULTIPLICAR"); Console.WriteLine(""); CalcularRespuesta(operacion); break; } case 4: { Console.WriteLine("DIVIDIR"); Console.WriteLine(""); CalcularRespuesta(operacion); break; } default: break; } } private static void CalcularRespuesta(int operacion) { Console.Write("Digite el primer número: "); double numero1 = double.Parse(Console.ReadLine()); Console.Write("Digite el segundo número: "); double numero2 = double.Parse(Console.ReadLine()); if (operacion == 1) { double resultado = numero1 + numero2; Console.WriteLine("El resultado de sumar {0} + {1} = {2}", numero1, numero2, resultado); } if (operacion == 2) { double resultado = numero1 - numero2; Console.WriteLine("El resultado de restar {0} - {1} = {2}", numero1, numero2, resultado); } if (operacion == 3) { double resultado = numero1 * numero2; Console.WriteLine("El resultado de multiplicar: {0} x {1} = {2}", numero1, numero2, resultado); } if (operacion == 4) { if (numero2 != 0) { double resultado = numero1 / numero2; Console.WriteLine("El resultado de dividir: {0} / {1} = {2}", numero1, numero2, resultado); } else { Console.WriteLine("No se puede dividir entre {0}", numero2); } } Console.WriteLine(" "); } } } ```
osea que si dice Yes. no valida jajaja
huy muy bonito y todo pero ese while al lado del } no pega inge
Hola PLatzi Community, Yo dejo esta importante Documentacion Oficial de MicroSoft para conocer mas sobre C#.. <https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/expressions>
**✅✅ ¿Quieres solucionar el BUG de la clase en el minuto 17:30?** **Mira estas 3 slides:** ![](https://static.platzi.com/media/user_upload/mejorandoWHile-2-de1d76ce-f7db-4d17-a242-7e229c3dcbd1.jpg) ![](https://static.platzi.com/media/user_upload/mejorandoWHile-3-e36b4b90-bac2-4e3c-bef5-cdb4dcc3bfc7.jpg) ![](https://static.platzi.com/media/user_upload/mejorandoWHile-4-42f09262-9981-476e-93e9-26c5b639ac06.jpg)
**🤔 ¿Sabes por qué se tiene que crear un objeto de la clase Random para utilizar sus métodos?** Respuesta ⬇⬇⬇ ![](https://static.platzi.com/media/user_upload/codigo-while-12-6f85b6e4-cf42-401c-8158-2f85be82b82e.jpg)
⭐**Desarrollo del juego paso a paso:** ![](https://static.platzi.com/media/user_upload/codigo-while-1-47e8ae89-1b40-4177-ab7d-259088c35dc7.jpg) ![](https://static.platzi.com/media/user_upload/codigo-while-2-38ca5257-6e52-4b7a-b91e-04fed456b6e3.jpg) ![](https://static.platzi.com/media/user_upload/codigo-while-3-26e5c3cd-e888-41d3-831f-aff45f56e726.jpg) ![](https://static.platzi.com/media/user_upload/codigo-while-4-5d1eb2d6-c0bb-401e-8c99-90bda2aed782.jpg) ![](https://static.platzi.com/media/user_upload/codigo-while-5-1cded557-8a6c-4206-8473-3419ed0d46b1.jpg) ![](https://static.platzi.com/media/user_upload/codigo-while-6-dbe8778b-d3b8-4172-bd82-eae9316893ad.jpg) ![](https://static.platzi.com/media/user_upload/codigo-while-7-75acf489-e6bc-40ae-aa4b-34b5c2820893.jpg) ![](https://static.platzi.com/media/user_upload/codigo-while-8-2583834d-d96b-4da0-84ee-a8ab532b8b0e.jpg) ![](https://static.platzi.com/media/user_upload/codigo-while-9-41c88a76-25c7-4d24-be72-4804137212a3.jpg) ![](https://static.platzi.com/media/user_upload/codigo-while-10-713fab55-16e1-40fc-a38a-9da484a828aa.jpg) ![](https://static.platzi.com/media/user_upload/codigo-while-11-374e987b-45b6-4267-84a5-aa524daedb5d.jpg) ![](https://static.platzi.com/media/user_upload/codigo-while-12-3a9c1c3e-d6c6-4c49-9c4b-53064d8d5786.jpg) ![](https://static.platzi.com/media/user_upload/codigo-while-13-5274455d-e118-48d0-a34c-2a3b37859687.jpg) ![](https://static.platzi.com/media/user_upload/codigo-while-14-86cea335-6798-4965-8636-b1092c6f7096.jpg) ![](https://static.platzi.com/media/user_upload/codigo-while-15-55424416-fa0c-4264-8699-f8b91a421b84.jpg) ![](https://static.platzi.com/media/user_upload/codigo-while-16-ff1ce790-0edb-4bff-ba2c-e2623c268578.jpg)
tengo problemas con mi codigo, me sale un bucle infinito y no se como resolverlo ![](https://static.platzi.com/media/user_upload/image-3de120a2-64fe-496f-832b-8712543c1cb5.jpg)

El rey equivale a 10 en BlackJack, igual que todas las figuras, Jack, Reina y Rey valen 10, As vale 1 u 11.

Jejeje deben seguir el video amigos no se preocupen, creo que al inicio todos programamos así, pero a medida que avanzamos factorizamos y reducimos el código, limpiando el antiguo…

Console.WriteLine(“Hello, World!”);

// variables

int totalJugador = 0;
int totalMaquina = 0;
int num = 0;
string mensaje = “”;
string switchControl = “menu”;

// Juego Blackjack

while (true)
{

switch (switchControl)
{
    case "menu":
        Console.WriteLine(" Bienvenido al casino online: ");
        Console.WriteLine(" escriba 1 para entrar al juego: ");
        switchControl = Console.ReadLine();
        break;

    case "1":

        do
        {
            System.Random random=new System.Random();
            num = random.Next(1, 12);
            totalJugador = totalJugador + num;
            Console.WriteLine(" Toma tu primera carta jugador: ");
            Console.WriteLine($" te salio el numero: {num}");
            Console.WriteLine(" ¿deseas otra carta? ");
        } while (Console.ReadLine() == " si " || Console.ReadLine() == "SI" );
        

        if (totalJugador > totalMaquina && totalJugador < 22)
        {
            mensaje = " Le ganaste a la maquina felicidades ";
            switchControl = "menu";
        }
        else if (totalJugador >= 22)
        {
            mensaje = " Perdiste contra la maquina te pasaste de 21 ";
            switchControl = "menu";
        }

        else if (totalJugador <= totalMaquina)
        {
            mensaje = " perdiste game over ";
            switchControl = "menu";
        }
        else
        {
            mensaje = " condicion no valida ";
            switchControl = "menu";
        }

        Console.WriteLine(mensaje);
        break;
    default:
        Console.WriteLine(" Valor ingresado no valido: ");
        break;
}

}

DONDE ESTASSSSSSSSSSS JUANNNNNNNN

Yo había hecho esto antes de avanzar en el curso:

int totalJugador = 0;
int totalDealer = 0;
string message = "";

Console.WriteLine("Bienvenido al casino");
Console.WriteLine("Escriba '21' para jugar al 21");
string switchControl = Console.ReadLine();

while(true)
{
    switch (switchControl)
    {
        case "21":
            Console.WriteLine("¿cuál es el total del jugador?:");
            totalJugador = Convert.ToInt32(Console.ReadLine());

            Random rnd = new Random();
            totalDealer = rnd.Next(1, 21);
            Console.WriteLine($"total del dealer: {totalDealer}");

            message = totalJugador <= totalDealer ? "Has perdido :(" : "Has ganado :D";
            Console.WriteLine(message);
            break;

        default:
            break;
    }
}

lo hice de esta manera pensaba que despues de la pausa seria igual que la mia jaajajaj

<code> 
System.Random random = new System.Random();
 num = random.Next(1, 12);
 totalJugador = totalJugador + num;
 Console.WriteLine("toma tu carta, jugador ");
 Console.WriteLine("te salio el " + num);

Aqui dejo mi codigo para que el Dealer juege tambien

void otraCartaDealer()
{
    carta = random.Next(1, 11);
    totaldealer = carta + totaldealer;
}
//Dealer AI
            do
            {
                if (totaldealer < 11)
                {
                    otraCartaDealer();
                }
                else if (totaldealer < 21)
                {
                    double probabilidad = 1.0 - ((double)(totaldealer - 11) / 10.0);
                    if (random.NextDouble() < probabilidad)
                    {
                        otraCartaDealer();
                    }
                    else { message = "Pasar"; }
                }
                else { message = "Pasar"; }
            } while (message != "Pasar");

Todos los “Si” que he escrito pero son una mala practica jsjsjsjsjsjsjsjsjsj

en el do while, cuando pregunta si desea otra carta es mejor cococarlo de esta forma:
Console.WriteLine("¿Deseas otra carta? 1 es ‘si’ 2 es ‘no’");
así evitas la opción de que se escribió con mayúsculas o con minúsculas. o es 1 o es 2.