Noticias Weblogs Foros Wiki Código

Meta-Info

¿Que es?

Planeta Código es un agregador de weblogs sobre programación y desarrollo en castellano. Si eres lector te permite seguirlos de modo cómodo en esta misma página o mediante el fichero de subscripción.

rss subscripción

Sponsors

Puedes utilizar las siguientes imagenes para enlazar PlanetaCodigo:
planetacodigo

planetacodigo

Si tienes un weblog de programación y quieres ser añadido aquí, envíame un email solicitándolo.

Idea: Juanjo Navarro

Diseño: Albin

Preparando SCJP

Control del Flujo: If y Switch

Noviembre 28th, 2011 - [Enlace local]

Las sentencias condicionales permiten ejecutar código de forma selectiva.
En Java tenemos las sentencias condicionales if y switch.

Sentencia If:
La sintaxis más sencilla de una sentencia if es:

if (expresionLogica)  //Si expresionLogica se evalúa a true entonces se ejecuta codigo.
   codigo

Si se tiene una sola sentencia de código no es obligatorio encerrarla entre llaves pero siempre es recomendable por legibilidad.

Ejemplo:

if (precio < 100){
    comprar();  //Mas legible entre llaves.
}

 

Si nos encontramos un if sin llaves debemos recordar que solo aplica a la primera sentencia.

if (precio < 100)
    comprar();      //Solo esta sentencia forma parte del if.
    salirTienda();  //No forma parte del código del if. Siempre se ejecuta.
    volverACasa();  //No forma parte del código del if. Siempre se ejecuta.

La cláusula else es opcional. Se incluye cuando queremos que se ejecute código en el caso de que no se cumpla la condición en el if.

if (precio < 100){
    comprar();
}
else{
    System.out.println("Yo no soy tonto.");
}

También podemos tener una estructura if, else-if, else. Se da en los casos en los que queremos comprobar varias condiciones.

if (precio < 100){
    comprar();
}
else if (price < 2000 && tengoCredito){
    comprarConTarjeta();
}
else{
    System.out.println("Yo no soy tonto.");
}

En las sentencias If se cumplirá:


Switch

Con esta sentencia vamos a evaluar una expresión y dependiendo de su valor ejecutaremos un código u otro:

switch (expresion){
    case constante1: codigo1
    case constante2: codigo2
    case constante3: codigo3
    default: codigo
}

Si expresion coincide con alguna de las constantes se ejecutará el código de ese case y se seguirá ejecutando el código de los siguientes case hacia abajo hasta que se encuentre una sentencia break.

La sentencia default es opcional y se puede especificar cuando queremos que se ejecute un código para cualquier valor que sea distinto a los especificados en los case.

En los siguientes ejemplos podemos comprobar cómo afecta al resultado la existencia y posición de las sentencias breaks y default:

1. Ejemplo de un Switch Típico.
Switch con breaks en cada case y una clásula default al final.
Recorremos el array niveles. Cada valor entra en su case correspondiente y para al tener la sentencia break. Al estar la cláusula default al final no hace falta que tenga break.

public class EjemploSwitch1{
    public static void main (String[] args){
        int[] niveles = {1, 2, 3, 0};

        System.out.println("\nEjecucion Switch Tipico (breaks y default al final): " );
    	for (int i=0; i < niveles.length; i++){  	{
            System.out.println("Nivel: " + niveles[i]);
    	    switch (niveles[i]){
            case 1:   System.out.println("\tNivel Basico.");
                      break;

            case 2:   System.out.println("\tNivel Intermedio.");
                      break;

            case 3:   System.out.println("\tNivel Avanzado.");
                      break;

            default: System.out.println("\tNivel no informado.");
            }
    	}
    }
}

Resultado:


2. Sentencia Default No al Final.
En este caso hemos colocado la sentencia default sin break después del primer case. Todos los case tienen break. Cuando niveles[i] es igual a 0, ejecuta el código asociado a default. Al no tener break pasa al case 2, ejecuta su código y entonces sí para al tener break.

public class EjemploSwitch2{
    public static void main (String[] args){
        int[] niveles = {1, 2, 3, 0};
	System.out.println("\nEjecucion Switch con Breaks Default enmedio sin break: " );
    	for (int i=0; i < niveles.length; i++)   	{
            System.out.println("Nivel: " + niveles[i]);
    	    switch (niveles[i]){
            case 1:   System.out.println("\tNivel Basico.");
                      break;

            default:  System.out.println("\tNivel no informado.");

            case 2:   System.out.println("\tNivel Intermedio.");
                      break;

            case 3:   System.out.println("\tNivel Avanzado.");
                      break;

            }
    	}
    }
}

Ejecución:


3. Sentencias Case sin Break (Ejemplo en el que no tiene lógica aplicarlo).
En este Switch comprobamos qué ocurre si no colocamos ningún break. Para cada valor de niveles se ejecutan todos los case y default.

public class EjemploSwitch3{
    public static void main (String[] args){
        int[] niveles = {1, 2, 3, 0};
        System.out.println("\nEjecucion Switch sin Breaks (entra en todos los case cada vez): ");
        for (int i=0; i < niveles.length; i++)
        {
            System.out.println("Nivel: " + niveles[i]);
    	    switch (niveles[i])
            {
              case 1: System.out.println("\tNivel Basico.");

              case 2: System.out.println("\tNivel Intermedio.");

              case 3: System.out.println("\tNivel Avanzado.");

              default: System.out.println("\tNivel no informado.");
            }
        }
    }
}

Ejecución:


4. Sentencias Case Sin Break (Ejemplo en el que sí podría ser útil).
En este caso comprobamos cómo a veces puede tener lógica para nuestro código dejar los case sin break. Hemos cambiado el orden de las constantes en los case.

public class EjemploSwitch4{
    public static void main (String[] args){
        int[] niveles = {1, 2, 3, 0};

	System.out.println("\nEjecucion Switch sin Breaks (con logica que podria ser correcta): ");
        for (int i=0; i < niveles.length; i++)
        {
            System.out.println("Nivel: " + niveles[i]);
    	    switch (niveles[i])
            {
              case 3: System.out.println("\tNivel Avanzado.");

              case 2: System.out.println("\tNivel Intermedio.");

              case 1: System.out.println("\tNivel Basico.");
                      break;

              default: System.out.println("\tNivel no informado.");
            }
    	}
    }
}

Ejecución:


En el switch se debe cumplir:


Filed under: Estudio, Tema 5 Tagged: Certificacion Java, Control del flujo, Flujo de Control, if, Java, ocpjp, SCJP, switch

» Leer más, comentarios, etc...

Información legal y técnica