CONDICIONAL DE SELECCIÓN SWITCH EN JAVA. EJEMPLO DE APLICACIÓN. La instrucción switch es una forma de expresión de un anidamiento múltiple de instrucciones if ... else. else. Su uso no puede considerarse, por tanto, estrictamente necesario, puesto que siempre podrá ser sustituida por el uso de if. No obstante, a veces nos resultará útil al in troducir mayor claridad en el código.
La sintaxis será: switch (expresión) { case valor1: instrucciones; break; case valor2: instrucciones; break; . . . default: sentencias; break; } switch (expresión) { case valor1: case valor2: case valor: instrucciones; break; case valor!: instrucciones; break; . . . default: sentencias; break; }
squemáticamente a modo de diagrama de !u"o:
La cláusula default es opcional y representa las instrucciones que se e"ecutarán en caso de que no se veri#que ninguno de los casos evaluados. l último break dentro de un switch $en default si existe esta cláusula, o en el último caso evaluado si no existe default % tambi&n es opcional, pero lo incluiremos siempre para ser metódicos.
Switch solo se puede utili!" p!"! e#!lu!" o"di$!les $por ordinal entenderemos en general valores num&ricos enteros o datos que se puedan asimilar a valores num&ricos enteros%. 'or tanto no podemos evaluar cadenas $String% usando s(itc) porque el compilador nos devolverá un error de tipo *found "ava.lan#.$trin# but expected int +. S se permite evaluar caracteres y lo que se denominan tipos enumerados, que veremos más adelante. S(itc) solo permite evaluar valores concretos de la expresión: no permite evaluar intervalos $pertenencia de la expresión a un intervalo o rango% ni expresiones compuestas. -ódigo de e"emplo: "emplo de m&todo que usa s(itc) public void dimeSidads-ritica$% / s(itc) $edad% / case 0: System.out.println $12caba de nacer )ace poco. No )a cumplido el a3o1%4 brea54 case 67: System.out.println $1stá "usto en la mayora de edad1%4 brea54 case 89: System.out.println $1stá en la edad de "ubilación1%4 brea54 default: System.out.println $1La edad no es crtica1%4 brea54
n algunos casos escribimos varias instrucciones en una lnea y en otros una sola instrucción por lnea. 2mbas posibilidades son válidas. 'rueba a escribir, compilar e invocar este m&todo o uno parecido usando switch. 'ara ello crea primero una clase de nombre 'ersona cuyos atributos sean nombre y edad. ;niciali
EJE%CICIO
-onsidera estás desarrollando un programa =ava donde n ecesitas traba"ar con ob"etos de tipo >otor $que representa el motor de una bomba para mover !uidos%. ?e#ne una clase >otor considerando los siguientes atributos de clase: tipo@omba $int%, tipoAluido $String%, combustible $String%. ?e#ne un constructor asignando unos valores de defecto a los atributos y los m&todos para poder establecer y obtener los valores de los atributos. -rea un m&todo tipo procedimiento denominado dimeBipo>otor$% donde a trav&s de un condicional s(itc) )agas lo siguiente: a% Si el tipo de motor es 0, mostrar un mensa"e por consola indicando *No )ay establecido un valor de#nido para el tipo de bomba+. b% Si el tipo de motor es 6, mostrar un mensa"e por consola indicando *La bomba es una bomba de agua+. c% Si el tipo de motor es C, mostrar un mensa"e por consola indicando *La bomba es una bomba de gasolina+. d% Si el tipo de motor es D, mostrar un mensa"e por consola indicando *La bomba es una bomba de )ormigón+. e% Si el tipo de motor es E,mostrar un mensa"e por consola indicando *La bomba es una bomba de pasta alimenticia+. f% Si no se cumple ninguno de los valores anteriores mostrar el mensa"e *No existe un valor válido para tipo de bomba+. -ompila el código para comprobar que no presenta errores, crea un ob"eto, usa sus m&todos y comprueba que apare