Contenido de certificación
Buscar
Social
Ofertas laborales ES
« Más sobre Java 7 | Main | Gestión de hilos dentro de una aplicación web de Tomcat. »
martes
abr092013

Pregunta sobre switch

Hola a todos,

¿Podéis argumentar cuál sería la salida en consola después de ejecutar el siguiente programa?

 

package javahispano;

public class EjemplosSwitch {

    public static void main(String args[]) {
        String jugador = "Cristiano Ronaldo";

        switch (jugador) {
        case "Cristiano Ronaldo":
            System.out.println("Real Madrid CF");
        case "Leo Messi":
            System.out.println("FC Barcelona");
        }
    }
}

Un saludo,

    Jaime.

Reader Comments (7)

Este código sólo funcionaría a partir de la versión Java SE 7 en adelante, pues en versiones anteriores no es posible usar un String para el switch. Partiendo de ahí, la salida sería:

Real Madrid CF
FC Barcelona

Debido a que entra en el primer "case", y como no encuentra un break que lo evite, continua ejecutando las siguientes órdenes.

abril 9, 2013 | Registered Commenterdherrerabits

Correcto,
Srtring se admite en switch a partir de Java SE 1.7. Pregunta, ¿previamente qué tipo de datos primitivos se aceptan?
Personalmente, no me parece muy adecuado tener que meter break aposta en cada break... no es muy intuitivo... pero es así.

abril 9, 2013 | Registered Commenterjcarmonaloeches

Antes se aceptaban primitivos que representen valores enteros (short, byte, long, int), y también los char 's.

A partir de Java 1.5, se suman los tipos Enum.

Y en la 1.7, como bien se indica, el switch basado en Strings.

Saludosl.

abril 10, 2013 | Unregistered Commentermartdominguez

Que los break se puedan usar o no es útil, como puede verse en el Test siguiente:

public class Test {

public static void main(String[] args) {
getNumero(1);
getNumero(2);
getNumero(5);
getNumero(6);
getNumero(9);
}

private static void getNumero(int numero) {
switch (numero) {
case 1:
case 2:
case 3:
System.out.println("está entre los tres primeros");
break;
case 4:
case 5:
System.out.println("es un 4 o un 5");
break;
case 6:
System.out.println("es 6");
break;
default:
System.out.println("es mayor de 6");
break;
}
}
}

abril 10, 2013 | Registered Commenterchoces

Ahí os he visto ágiles, Marta y choces ;)

abril 14, 2013 | Registered Commenterjcarmonaloeches

@choces que se puedan usar no quiere decir que sea lo habitual. En el 90% de los casos (cifra inventada pero más que factible) la gente hace switch para evitarse una retalia de "else if". Creo que sería más natural tener una claúsula para poder seguir el switch en lugar de una para detenerlo. Es decir, por defecto algo así:

switch (jugador) {
case "Cristiano Ronaldo":
System.out.println("Real Madrid CF");
case "Leo Messi":
System.out.println("FC Barcelona");
}

devolvería:

Real Madrid CF

Y algo así:

switch (jugador) {
case "Cristiano Ronaldo":
System.out.println("Real Madrid CF");
continue;
case "Leo Messi":
System.out.println("FC Barcelona");
}

devolvería:

Real Madrid CF
FC Barcelona

octubre 17, 2013 | Unregistered CommenterAntamack

Yo uso bastante lo de quitar el break en construcciones de este tipo:

switch( valor )
{
case 1: lo_que_sea(); break;
case 2:
default:
otra_cosa();
}

es decir, especifico que 2 es el valor por defecto de un plumazo.

noviembre 4, 2013 | Unregistered CommenterRaul Luna

PostPost a New Comment

Enter your information below to add a new comment.

My response is on my own website »
Author Email (optional):
Author URL (optional):
Post:
 
Some HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>