David Dzul
Creo que no todos los videos se lograron subir, bug!
Hola, quiero felicitarte por haber llegado hasta aquí. Estamos casi por llegar al final de este curso y en este momento conocerás la sentencia Switch.
¿Para qué sirve Switch?
Piensa en ella como una alternativa a if-else, pero en este caso se evaluará que una sola expresión coincida con una cantidad limitada de valores o condiciones.
Imagina que tienes una lista limitada de refrescos y quieres imprimir en un ticket cuál escogió el cliente y su precio. Para este caso podemos utilizar un Switch case de esta forma:
using System; public class switchExample { public static void Main() { Console.WriteLine("Enter the selected soda: "); string caseSwitch = Console.ReadLine(); switch (caseSwitch) { case "cola": Console.WriteLine("Cola soda - $2 USD"); break; case "lime": Console.WriteLine("Lime soda - $1 USD"); break; case "orange": Console.WriteLine("Orange soda - $1.5 USD"); break; case "apple": Console.WriteLine("Apple soda - $1 USD"); break; default: Console.WriteLine("ERROR: You did not select a soda or you entered an incorrect value."); break; } } }
Cómo funciona
Para este ejemplo tenemos cuatro casos que el usuario puede elegir y una variable es la que es evaluada para que el Switch decida qué bloque de código ejecutar dependiendo de cada caso.
En el ejemplo esta variable es caseSwitch y es en switch(caseSwitch) donde se le indica a la sentencia Switch qué variable debe comparar para su decisión.
Así es que si la variable es igual a “cola”, por ejemplo, el case hará match y ejecutará:
Console.WriteLine("Cola soda - $2 USD"); break;
Si te fijas hay algo muy importante al final de cada bloque dentro de los casos y es la palabra reservada break.
Esta palabra le indica al programa que es el punto donde terminan todas las instrucciones de ese casetermina toda instrucción de ese caso para regresar al punto de ejecución siguiente fuera del switch para continuar con el programa.
¿Y qué hay de default?
Al final de toda la estructura de Switch es muy recomendable poner un caso default. Piensa en él como un else que incluye algo que el programa debe ejecutar en caso de que no haya match con ninguno de los casos.
default: Console.WriteLine("ERROR: You did not select a soda or you entered an incorrect value."); break;
Para este ejemplo se imprime que al no haber ingresado alguno de los valores de los casos se está cayendo en un error. Un caso de uso bastante utilizado para los defaults.
En esta clase aprendiste otra sentencia del mundo de C# que ya puedes empezar a poner en práctica en tus programas. ¡Te veo en la próxima clase porque es momento de conocer sobre los ciclos!
David Dzul
Creo que no todos los videos se lograron subir, bug!
Cesar Eduardo Valle Pino
Realice este ejercicio como si se tratara de un menú, con Switch se puede evitar el uso de If -- Else If -- Else If -- Else If-- Else ... El último Else sería como el default, y el If y cada Else If como cada case...
public static void Main() { Console.WriteLine("Ingrese el número de su color favorito: "); Console.WriteLine(" 1. Azul "); Console.WriteLine(" 2. Rojo "); Console.WriteLine(" 3. Verde "); string caseSwitch = Console.ReadLine(); switch (caseSwitch) { case "1": Console.WriteLine("Su color favorito es el Azul"); break; case "2": Console.WriteLine("Su color favorito es el Rojo"); break; case "3": Console.WriteLine("Su color favorito es el Verde"); break; default: Console.WriteLine("ERROR: No ha ingresado una opción correcta."); break; } }
fernando reboreda martinez
hello world.en el curso de fundamentos de c# no salen las lecturas y esa es al respecto mi lectura.
Joan Plascencia López
Aquí solo lo usé para un "control" de entrada de alguna cantina / botanero. En su momento intenté hacerlo con ifs pero me falló con un caso específico jajajaja
Matias Eduardo Carrizo
En ese caso lo haría con if
Abdel Cano
Creo que C# no evaluaba condicionales en los case del switch
Eduardo Canales Alborez
Ok, todas las lecturas no fueron colocadas y ni se dieron cuenta. :/
Jimmy Buriticá Londoño
Ya la lectura esta en el curso.
Carlos Adrian PACHECO PINILLA
qué pasó profe @celismx ??? te extrañamos en la explicación de este tema. Creo que una de las fortalezas de PLATZI son sus excelentes profesores. Espero que no se vuelva una mala costumbre.... jejjej
Jimmy Buriticá Londoño
Es otra forma de aprender, además la lectura esta muy clara.
Diego Alonso Ojeda Medina
Patrones de coincidencia (C# 7.0 y posterior)
Desde C# 7.0, se pueden usar patrones en la sentencia switch, lo que permite hacer coincidir tipos, comparar expresiones más complejas, y realizar más verificaciones dentro de cada caso:
switch (valor) { case int n when n > 0: Console.WriteLine("Número positivo"); break; case string s: Console.WriteLine($"Una cadena: {s}"); break; default: Console.WriteLine("Otro tipo o valor"); break; }
Con este enfoque, puedes evaluar condiciones más complejas directamente dentro del switch, aumentando la flexibilidad y la capacidad de manejar múltiples escenarios dentro de tu código.
En .NET 8 y .NET 9, se han introducido mejoras y nuevas características que afectan el uso de la sentencia switch, especialmente en términos de rendimiento, legibilidad del código y nuevas funcionalidades disponibles en C# 12 y C# 13.
Mejoras en .NET 8 y .NET 9:
switch. Esto permite condiciones más complejas y patrones más expresivos, como el uso de combinadores de patrones (and, or, not) y patrones relacionales directamente dentro de las sentencias switch.switch. Estas mejoras son particularmente útiles en escenarios que involucran coincidencias complejas o grandes volúmenes de datos.switch para inicializar matrices o colecciones con lógica condicional.switch se utilizan junto con delegados o asignaciones de grupos de métodos.Ejemplo de Uso:
Con estas mejoras, una expresión switch en C# 13 podría verse así:
int numero = 5; string resultado = numero switch { > 0 and <= 5 => "Número pequeño", > 5 => "Número grande", _ => "Desconocido" };
Este ejemplo demuestra cómo se pueden usar patrones relacionales directamente dentro de una sentencia switch, ofreciendo una forma más concisa y legible de expresar lógica condicional.
Javier Camilo Torres Vera
Gracias por el aporte. Interesante como evoluciona.
Rolando Mamani Salas
Bugs ?
Felix Ricky Llanos Bonifacio
:)
José Rubio
Les dejo mi versión del ejemplo :)
Console.WriteLine("Topic: Case Statement"); Console.WriteLine("Soda Shop"); Console.WriteLine("Select a soda and enter the number of your choice "); Console.WriteLine("Options:\n 1.Cola \n 2.Lime \n 3.Orange \n 4.Apple"); int customerChoice = int.Parse(Console.ReadLine()); switch (customerChoice) { case 1: Console.WriteLine("Cola soda - $2 USD"); break; case 2: Console.WriteLine("Lime soda - $1 USD"); break; case 3: Console.WriteLine("Orange soda - $1.5 USD"); break; case 4: Console.WriteLine("Apple soda - $1 USD"); break; default: Console.WriteLine("Select a valid option"); break; }
Damian Alquinga
Una pregunta, este switch funciona como el elif de python?
Juan Felipe Rodriguez Valencia
les dejo aquí mi calculador a con la sentencia switch: para el que la quiera ampliar o modificar:
using System;
using System.Collections.Generic;
using System.Linq;
namespace CalculatorMethods
{
internal class Program
{
public void IntegerAddition(int a, int b)
{
int addition = a + b;
Console.WriteLine("Result of the integer addition: " + addition);
}
public void Division(float a, float b)
{
if (b != 0)
{
float result = a / b;
Console.WriteLine("Result of the division: " + result);
}
else
{
Console.WriteLine("Error: Cannot divide by zero.");
}
}
public void Multiplication(int a, int b)
{
int multiplication = a * b;
Console.WriteLine("Result of the integer multiplication: " + multiplication);
}
public void SquareRoot(double a)
{
if (a >= 0)
{
double squareRoot = Math.Sqrt(a);
Console.WriteLine("Square root: " + squareRoot);
}
else
{
Console.WriteLine("Error: Cannot calculate the square root of a negative number.");
}
}
static void Main(string[] args)
{
Program calculator = new Program();
char option;
do
{
Console.WriteLine("Select an option:");
Console.WriteLine("1. Integer addition");
Console.WriteLine("2. Division of numbers");
Console.WriteLine("3. Integer multiplication");
Console.WriteLine("4. Square root");
Console.WriteLine("5. Exit");
option = Console.ReadKey().KeyChar;
Console.WriteLine();
switch (option)
{
case '1':
Console.Write("Enter the first integer: ");
int num1 = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter the second integer: ");
int num2 = Convert.ToInt32(Console.ReadLine());
calculator.IntegerAddition(num1, num2);
break;
case '2':
Console.Write("Enter the numerator: ");
float numerator = Convert.ToSingle(Console.ReadLine());
Console.Write("Enter the denominator: ");
float denominator = Convert.ToSingle(Console.ReadLine());
calculator.Division(numerator, denominator);
break;
case '3':
Console.Write("Enter the first integer: ");
int factor1 = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter the second integer: ");
int factor2 = Convert.ToInt32(Console.ReadLine());
calculator.Multiplication(factor1, factor2);
break;
case '4':
Console.Write("Enter the number to calculate the square root: ");
double number = Convert.ToDouble(Console.ReadLine());
calculator.SquareRoot(number);
break;
case '5':
Console.WriteLine("Exiting the program.");
break;
default:
Console.WriteLine("Invalid option. Please select a valid option.");
break;
}
Console.WriteLine("\nPress any key to continue...");
Console.ReadKey();
Console.Clear();
} while (option != '5');
}
}
}
Maria Esther Mendoza Zafra
Realicé el ejemplo, me quedó de este modo:
Console.WriteLine("Bienvenido a Soda Sale\nEscriba la soda elegida para ver su precio"); string soda = Console.ReadLine(); switch (soda) { case "cola": Console.WriteLine("Cola Soda - S/. 2.50"); break; case "lime": Console.WriteLine("Lime Soda - S/. 1.50"); break; case "inka": Console.WriteLine("Inka Cola -S/. 2.50 "); break; default: Console.WriteLine("El valor ingresado es incorrecto"); break; }
Cesar Fernandez
Para introducir una opcion en el menu switch no podemos predecir si el usuario usara una mayuscula al inicio o si por algun motivo en medio de la oracion.
using System; public class switchExample { public static void Main() { Console.WriteLine("Enter the selected soda: "); string caseSwitch = Console.ReadLine(); caseSwitch = caseSwitch.ToLower(); switch (caseSwitch) { case "cola": Console.WriteLine("Cola soda - $2 USD"); break; case "lime": Console.WriteLine("Lime soda - $1 USD"); break; case "orange": Console.WriteLine("Orange soda - $1.5 USD"); break; case "apple": Console.WriteLine("Apple soda - $1 USD"); break; default: Console.WriteLine("ERROR: You did not select a soda or you entered an incorrect value."); break; } } }
lo que hace "caseSwitch = caseSwitch.ToLower();" es tomar la oracion y cambiar todos los caracteres por su equivalente a minusculas, si van a usar un input en algo que desarrollen, siempre es buena practica, al igual que usar el ".ToUpper" para los nombres (para poner solo la letra inicial en mayuscula se debe tratar a los STRINGS como una lista de CHAR, entonces el primer caracter es seleccionado usando posicionies[ ] y se le aplica el ".ToUpper").
Espero les sea de ayuda para los interesados en desarrollar apps o videojuegos con C#!
Fabian Castelblanco
Mi aporte
Console.WriteLine("Please select one game to play \n " + "Pac-man \n" + " Pepsi-Man \n" + " Crash CTR \n" + " Mario Cart \n"); string game = Console.ReadLine(); switch (game) { case "Pac-man": Console.WriteLine("Pleae enter 2 coins"); break; case "Pepsi-Man": Console.WriteLine("Pleae enter 4 coins"); break; case "Crash CTR": Console.WriteLine("Pleae enter 3 coins"); break; case "Mario Cart": Console.WriteLine("Pleae enter 8 coins"); break; default: Console.WriteLine("Enter A valid game"); break; }
adony palacios
mas claro que el agua ........ imposible mas sencillo
Ricardo Mejía
Liliana Piriz
calculadora con cambio a case -- namespace caseStatment { class Program { static void Main(string[] args) { double suma = 0; double resta = 0; double division = 0; double multiplicacion = 0; double raiz2 = 0; double num1; double num2; Console.WriteLine("CALCULADORA"); Console.WriteLine("ingresa numero: "); num1 = double.Parse(Console.ReadLine()); Console.WriteLine("ingresa segundo numero: "); num2 = double.Parse(Console.ReadLine()); Console.WriteLine("elige la opcion del 1 al 5: "); Console.WriteLine("1 - Sumar: "); Console.WriteLine("2 - Restar: "); Console.WriteLine("3 - Dividir: "); Console.WriteLine("4 - Multiplicar: "); Console.WriteLine("5 - Raiz 2: "); int opcion = int.Parse(Console.ReadLine()); switch (opcion) { case 1: suma = num1 + num2; Console.WriteLine("La suma es: " + suma); break; case 2: resta = num1 - num2; Console.WriteLine("La resta es: " + resta); break; case 3: if (num2 != 0) { division = num1 / num2; Console.WriteLine("La division es: " + division); } else { Console.WriteLine("La division entre 0 no exite"); } break; case 4: multiplicacion = num1 * num2; Console.WriteLine("La multiplicacion es: " + multiplicacion); break; case 5: if (num1 > 0) { raiz2 = Math.Sqrt(num1); Console.WriteLine($"La raiz cuadrada de: {num1} es {raiz2}"); } else { Console.WriteLine($"La raiz cuadrada de: {num1} no existe"); }
if (num2 > 0) { raiz2 = Math.Sqrt(num2); Console.WriteLine($"La raiz cuadrada de: {num2} es {raiz2}"); } else { Console.WriteLine($"La raiz cuadrada de: {num2} no existe"); } break; default: Console.WriteLine("La opcion que ingreso no es la correcta"); break; } } }
}
Carlos Alejandro Castro Dominguez
Dejo aca una claculadora básica usando Switch using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace SwitchCase { internal class Program { static void Main(string[] args) { Program program = new Program(); program.IniciarCalculadora(); }
//inicia la calculadora básica public void IniciarCalculadora() { Console.WriteLine("Bienvenido a tu calculadora Básica"); Console.WriteLine(" Escriba las siguientes palabras de acuerodo a la operación a realizar"); Console.WriteLine(" Las operaciones que puede realizar son:"); Console.WriteLine(" suma, resta, multiplicación y división"); string opcion = Console.ReadLine(); switch (opcion) { case "suma": Console.WriteLine("Ingrese el primer numero a sumar"); float n1= (float)Convert.ToDecimal(Console.ReadLine()); Console.WriteLine("Ingrese el Segunto numero a sumar"); float n2 = (float)Convert.ToDecimal(Console.ReadLine()); float suma = n1 + n2; Console.WriteLine("El resultado de la suma es " + suma); break; case "resta": Console.WriteLine("Ingrese el primer numero a restar"); float n3 = (float)Convert.ToDecimal(Console.ReadLine()); Console.WriteLine("Ingrese el Segunto numero a restar"); float n4 = (float)Convert.ToDecimal(Console.ReadLine()); float resta = n3-n4; Console.WriteLine("El resultado de la resta es " + resta); break; case "multiplicación": Console.WriteLine("Ingrese el primer numero a multiplicar"); float n5 = (float)Convert.ToDecimal(Console.ReadLine()); Console.WriteLine("Ingrese el Segunto numero a multiplicar"); float n6 = (float)Convert.ToDecimal(Console.ReadLine()); float multiplicacion = n5*n6; Console.WriteLine("El resultado de la multiplicación es " + multiplicacion); break; case "división": Console.WriteLine("Ingrese el primer numero a dividir"); float n7 = (float)Convert.ToDecimal(Console.ReadLine()); Console.WriteLine("Ingrese el Segunto numero a dividir"); float n8 = (float)Convert.ToDecimal(Console.ReadLine()); float division = n7/n8; Console.WriteLine("El resultado de la división es " + division); break; default: Console.WriteLine("Esa operación no la puedo realizar"); break; } } }
}
Yo use el mismo ejemplo de la calculadora del video anterior e intercambie los if e else if por los swiitch case
using System; namespace SwitchCase { internal class Program { static void Main(string[] args) { Console.WriteLine("Hello Folks!\n"); Console.WriteLine("Ingresa una opcion(letra):\na) suma\nb) resta\nc) multiplicacion\nd) divicion"); string option = Console.ReadLine(); option = option.ToLower(); switch(option) { case "a": Console.WriteLine("Seleccionaste suma..."); Console.WriteLine("Ingresa el primer valor: "); int num1 = int.Parse(Console.ReadLine()); Console.WriteLine("Ingresa el segundo valor: "); int num2 = int.Parse(Console.ReadLine()); int result1 = num1 + num2; Console.WriteLine($"El resultado es: {result1}"); break; case "b": Console.WriteLine("Seleccionaste resta..."); Console.WriteLine("Ingresa el primer valor: "); int num3 = int.Parse(Console.ReadLine()); Console.WriteLine("Ingresa el segundo valor: "); int num4 = int.Parse(Console.ReadLine()); int result2 = num3 - num4; Console.WriteLine($"El resultado es: {result2}"); break; case "c": Console.WriteLine("Seleccionaste multiplicacion..."); Console.WriteLine("Ingresa el primer valor: "); int num5 = int.Parse(Console.ReadLine()); Console.WriteLine("Ingresa el segundo valor: "); int num6 = int.Parse(Console.ReadLine()); int result3 = num5 * num6; Console.WriteLine($"El resultado es: {result3}"); break; case "d": Console.WriteLine("Seleccionaste division..."); Console.WriteLine("Ingresa el primer valor: "); int num7 = int.Parse(Console.ReadLine()); Console.WriteLine("Ingresa el segundo valor: "); int num8 = int.Parse(Console.ReadLine()); int result4 = num7 / num8; Console.WriteLine($"El resultado es: {result4}"); break; default: Console.WriteLine("\nSeleccione una opcion correcta..."); break; } } } }