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 25

Preguntas 2

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

Dejar茅 esto por aqu铆 鈥!!

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

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

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

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 鈥淛鈥, 鈥淨鈥 and 鈥淜鈥 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

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:

鉁婨n while, la condici贸n se verifica antes de ejecutar el bloque de c贸digo.

鉁婨n 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.

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.

**鉁呪渽 驴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)
C# y JS me parecen muy similares..
**馃 驴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(鈥淗ello, World!鈥);

// variables

int totalJugador = 0;
int totalMaquina = 0;
int num = 0;
string mensaje = 鈥溾;
string switchControl = 鈥渕enu鈥;

// 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 鈥淪i鈥 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 鈥榮i鈥 2 es 鈥榥o鈥");
as铆 evitas la opci贸n de que se escribi贸 con may煤sculas o con min煤sculas. o es 1 o es 2.