No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Condicional Switch

15/20
Recursos

Aportes 14

Preguntas 4

Ordenar por:

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

o inicia sesi贸n.

<string number;
int opt = 2;
 
switch(opt)
{
    case 1: 
        number = "One";
        break;
    case 2: 
        number = "Two";
        break;
    default:
        number = "Error";
        break;
}
Console.WriteLine("El n煤mero es: " + number);> 

Condicional SWITCH

La instrucci贸n switch selecciona una lista de instrucciones para ejecutarla en funci贸n de la coincidencia de un patr贸n con una expresi贸n de coincidencia, como se muestra en el ejemplo siguiente:

DisplayMeasurement(-4);  // Output: Measured value is -4; too low.
DisplayMeasurement(5);  // Output: Measured value is 5.
DisplayMeasurement(30);  // Output: Measured value is 30; too high.
DisplayMeasurement(double.NaN);  // Output: Failed measurement.

void DisplayMeasurement(double measurement)
{
    switch (measurement)
    {
        case < 0.0:
            Console.WriteLine($"Measured value is {measurement}; too low.");
            break;

        case > 15.0:
            Console.WriteLine($"Measured value is {measurement}; too high.");
            break;

        case double.NaN:
            Console.WriteLine("Failed measurement.");
            break;

        default:
            Console.WriteLine($"Measured value is {measurement}.");
            break;
    }
}

En el ejemplo anterior, una instrucci贸n switch usa los siguientes patrones:

Un patr贸n relacional (disponible en C# 9.0 y versiones posteriores), para comparar el resultado de una expresi贸n con una constante.
Patr贸n constante: pruebe si un resultado de expresi贸n es igual a una constante.

En el ejemplo anterior tambi茅n se muestra el caso default. El caso default especifica las instrucciones que se ejecutar谩n cuando una expresi贸n de coincidencia no coincida con ning煤n otro patr贸n de caso. Si una expresi贸n de coincidencia no coincide con ning煤n patr贸n de caso y no hay ning煤n default caso, el control pasa por una switch instrucci贸n.

Una instrucci贸n switch ejecuta la lista de instrucciones en la primera secci贸n de switch cuyo patr贸n de caso coincida con una expresi贸n de coincidencia y cuya restricci贸n de caso, de haberla, se eval煤e como true. Una instrucci贸n switch eval煤a los patrones de casos en el orden de texto de arriba a abajo. El compilador genera un error cuando una instrucci贸n switch contiene un caso inaccesible.

Ejemplos de la sentencia SWITCH y su uso:

La sentencia switch no es ampliamente utilizada por programadores senior debido a algunas limitaciones y consideraciones en cuanto a su mantenimiento y legibilidad del c贸digo. Aqu铆 hay algunas razones:

  • Complejidad y dificultad de mantenimiento: A medida que aumenta el n煤mero de casos en una sentencia switch, se vuelve m谩s dif铆cil de mantener y comprender. El c贸digo puede volverse largo y enredado, lo que dificulta su lectura y comprensi贸n.

  • Falta de flexibilidad: La sentencia switch solo puede evaluar expresiones de igualdad. No permite la evaluaci贸n de expresiones l贸gicas o condiciones complejas. Esto puede ser limitante y requerir el uso de estructuras de control adicionales para abordar casos m谩s complejos.

  • Duplicaci贸n de c贸digo: Si hay m煤ltiples casos que requieren la misma l贸gica de ejecuci贸n, es necesario repetir ese c贸digo en cada caso correspondiente. Esto puede conducir a una mayor duplicaci贸n de c贸digo y dificultar la mantenibilidad y la introducci贸n de errores.

  • Mayor propensi贸n a errores: La sentencia switch puede ser propensa a errores, especialmente si se olvida agregar una instrucci贸n break al final de cada caso. Esto puede llevar a que se ejecuten casos no deseados o m煤ltiples casos debido a una falta de manejo adecuado.

En cambio, los programadores pueden preferir utilizar estructuras de control m谩s flexibles, como declaraciones if-else o diccionarios/mapeos, que pueden proporcionar una mayor legibilidad, modularidad y flexibilidad en el c贸digo.

Me gustar铆a dejar aqu铆 mis modificaciones,

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
int totalJugador = 0;
string mensaje;
int totalDealer = 15;
string controladorSwitch = "menu";

Console.WriteLine("Bienvenido, digita '21' para jugar al juego del 21");
controladorSwitch = Console.ReadLine();
switch (controladorSwitch)
{ 
    case "21":
        Console.WriteLine("Ingresa la sumatoria de tus cartas");
        totalJugador = Convert.ToInt32(Console.ReadLine());
        if ((totalJugador > totalDealer) && (totalJugador <= 21))
        {
            mensaje = "Venciste al Dealer, Felicidades.";
        }
        else if (totalJugador <= totalDealer)
        {
            mensaje = "No lograste vencer al Dealer.";
        }
        else if (totalJugador > 21)
        {
            mensaje = "No lograste vencer al Dealer, sacaste m谩s de 21";
        }
        else
        {
            mensaje = "Condic贸n no v谩lida para el juego.";
        }

        Console.WriteLine(mensaje);
        break;
    default:
        Console.WriteLine("No se reconoce el comando ingrsado");
        break;

}

Comparto mi c贸digo de un menu con distintos juegos:

int totalPlayer;
int totalDealer = 15;
string message;
int option;

Console.WriteLine("Menu: \n 1 - BlackJack \n 2 - Rock/Paper/Siccers \n 3 - Tik Tak Toe \n choose a game");
option = Convert.ToInt32(Console.ReadLine());

switch (option)
{
    case 1:
        Console.WriteLine("BlackJack Game");
        Console.WriteLine("Enter the total value of your cards");
        totalPlayer = Convert.ToInt32(Console.ReadLine());

        if (totalPlayer > totalDealer && totalPlayer < 22)
        {
            message = "You win :D";
        }
        else if (totalPlayer <= totalDealer || totalPlayer > 21)
        {
            message = "You lost :(";
        }
        else
        {
            message = "upps!!!";
        }

        Console.WriteLine(message);

        break;
    case 2:
        Console.WriteLine("2 - Rock/Paper/Siccers \n COMMING SOON");
        break;
    case 3:
        Console.WriteLine("3 - Tik Tak Toe \n COMMING SOON");
        break;
    default: Console.WriteLine("upss, option not valid");
        break;
}

Bienvenido y muchas gracias por su feedback.

Para que no rompa como el ejemplo que puso el maestro en el primer caso no se pone el break para que siga en ejecuci贸n y este valide la nueva variable, que es lo mismo que poner continu茅.

Que buenas analog铆as, me encanta ver plasmados los temas con rob贸tica. Gracias maestro, un honor!!

En la empresa donde trabajo utilizamos ni switch o else lo consideran mala practica. en lugar a eso utilizamos mas patrones de dise帽o

En la versi贸n Microsoft Visual Studio Community 2022 (64 bits) - Current Versi贸n 17.8.6 No me aceptada el "break"..,. dec铆a que en este nuevo contexto ya no era valida. Al checar documentaci贸n encontre que en lugar de break se usaba "return" Este c贸digo si fue valido son errores y compilo correctamente int numero; numero = 4; switch (numero) { case 1: Console.WriteLine("Este es un uno"); return; case 2: Console.WriteLine("Este es un dos"); return; case 3: Console.WriteLine("Este es un tres"); return; default: Console.WriteLine("Fallo de numero"); return; }
![](https://static.platzi.com/media/user_upload/Switch_Casino-80ae975f-d636-4581-8fdb-c44c17e102ad.jpg)

Yo estuve haciendo una calculadora en lo mas adelante la dejare por si me quieren dar un consejo.

var num1 = 0d;
var num2 = 0d;
var result = 0d;

Console.WriteLine(鈥淓lija una opcion: Suma, Resta, Multiplicacion, Division鈥);
string input = Console.ReadLine();

Console.WriteLine(鈥淚ngrese el primer valor鈥);
num1 = Convert.ToDouble(Console.ReadLine());

Console.WriteLine(鈥淚ngrese el segundo valor鈥);
num2 = Convert.ToDouble(Console.ReadLine());

switch (input.ToLower())
{
case 鈥渟uma鈥 or 鈥+鈥:
result = num1 + num2;
Console.WriteLine("EL resultado de su suma es: " + result);
break;

case "resta" or "-":
    result = num1 - num2;
    Console.WriteLine("El resultado de su resta es: " + result);
    break;

case "multiplicacion" or "*":
    result = num1 * num2;
    Console.WriteLine("El resultado de su multiplicacion es: " + result);
    break;

case "division" or "/":
    result = num1 / num2;
    Console.WriteLine("El resultado de su division es: " + result);
    break;

default: 
    Console.WriteLine("La opcion elegida no esta disponible");
    break;

}

Console.WriteLine("Hello, World!");

Console.WriteLine(" Switch ");

// variables

int totalJugador = 25;
int totalMaquina = 15;
string mensaje = "";
string switchControl = "15";

// Juego Blackjack

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

    case "21":


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

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

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

Aqu铆 mi practica馃榾

con este cogio hacer que al escribir 21 entren al jeugo de 21

int totalJugador = 25;
int totalDealer = 15;
string message = 鈥溾;
string switchControl = 鈥渕enu鈥;
//Blackjack, Juntar 21 pidiendo, en casa de pasarte de 21 pierdes.
//cartas o en caso de tener menos
//de 21 igual tener mayor puntuaci贸n que el dealer
switch (switchControl)
{
case 鈥渕enu鈥:
Console.WriteLine(鈥淲elcome al c a s i n o鈥);
Console.WriteLine(鈥淓scriba 鈥21鈥 para jugar al 21鈥);
switchControl = Console.ReadLine();
switch (switchControl) {
case 鈥21鈥:
if (totalJugador > totalDealer && totalJugador < 22)
{
message = 鈥淰enciste al dealer, felicidades鈥;
}
else if (totalJugador >= 22)
{
message = 鈥淧erdiste vs el dealer, te pasaste de 21鈥;
}
else if (totalJugador <= totalDealer)
{
message = 鈥淧erdiste vs el dealer, lo siento鈥;
}
else
{
message = 鈥渃ondici贸n no v谩lida鈥;
}
Console.WriteLine(message);
break;

    }
    break;

default:
    Console.WriteLine("Valor ingresa no v谩lido en el  C A S I N O");
    break;

}