miércoles, 7 de septiembre de 2011

6 .- Sentencias de Control de Flujo (Parte 1)

Sentencias Condicionales

Del mismo modo que en la vida diaria, en un programa es necesario tomar decisiones basadas en ciertos hechos y actuar en consecuencia. El lenguaje Java tiene una sentencia básica denominada if (si condicional) que realiza un test y permite responder de acuerdo al resultado. 

La Sentencia IF

Si la condición es verdadera, la sentencia se ejecuta, de otro modo, se salta
dicha sentencia, continuando la ejecución de l programa saltando a otras
sentencias . La forma general de la sentencia if es: 





Si el resultado del test es verdadero ( true) se ejecuta la sentencia que sigue a continuación de if, en caso contrario, falso ( false), se salta dicha sentencia, tal como se indica en la figura. La sentencia puede consistir a su vez, en un conjunto de sentencias agrupadas en un bloque.

if (condición){ 
sentencias; 

En el siguiente ejemplo, si el número del boleto que hemos adquirido coincide con el número aparecido en el sorteo, nos dicen que hemos obtenido un premio.

if(numeroBoleto==numeroSorteo)
          System.out.println("has obtenido un premio");


La sentencia if...else 

La sentencia if...else completa la sentencia if, para realizar una acción alternativa

if (condición)
          sentencia1;
else
          sentencia2;


Las dos primeras líneas indican que si la condición es verdadera se ejecuta la sentencia 1. La palabra clave else, significa que si la condición no es verdadera se ejecuta la sentencia 2, tal como se ve en la figura..
Dado que las sentencias pueden ser simples o compuestas la forma general de

if...else es

if (condición){
sentencia1;
sentencia2;
}else{
          sentencia3
          sentencia4;
          sentencia5;
}
Existe una forma abreviada de escribir una sentencia condicional if...else como la
siguiente:
if (numeroBoleto==numeroSor teo)
          premio=1000;
else
          premio=0;
en una sola línea

premio=(numeroBoleto==numeroSoreteo) ? 1000 : 0;

La sentencia switch


A veces, es necesario, elegir entre varias alternativas, como se muestra en la siguiente figura




Considerando la siguiente serie de sentencias if...else 

if(expresion==valor1) 
sentencia1; 
else if(expresion==valor2) 
sentencia2; 
else if(expresion==valor3) 
sentencia3; 
else 
sentencia4; 

El código resultante puede ser difícil de seguir . El lenguaje Java proporciona una solución elegante a este problema mediante la sentencia condicional switch para agrupar a un conjunto de sentencias if...else. 


switch(expresion){ 
case valor1: 
                sentencia1; 
                break; //sale de switch 
         case valor2: 
                sentencia2; 
                break; //sale switch 

        case valor3: 
               sentencia3; 
               break; //sale de switch 

         default: 
               sentencia4; 

En la sentencia switch, se compara el valor de una variable o el resultado de evaluar una expresión, con un conjunto de números enteros valor1, valor2, valor3, ...o con un conjunto de caracteres, cuando coinciden se ejecuta el bloque de sentencias que están asociadas con dicho número o carácter constante. Dicho bloque de sentencias no está entre llaves sino que empieza en la palabra reservada case y termina en su asociado break.

Si el compilador no encuentra coincidencia, se ejecuta la sentencia default, si es
que está presente en el código.
Veamos ahora un ejemplo sencillo: dado el número que identif ica al mes (del 1 al 12) imprimir el nombre del mes.

public class TestSwitch{
  public static void main(String[] args) {
     int mes=3;
     switch (mes) {
        case 1: System.out.println("Enero"); break;
        case 2: System.out. println("Febrero"); break;
        case 3: System.out.println("Marzo"); break;
        case 4: System.out.println("Abril"); break;
        case 5: System.out.println("Mayo"); break;
        case 6: System.out.println("Junio"); break;
        case 7: System.out.println("Julio"); break;
        case 8: System.out.println("Agosto"); break;
        case 9: System.out.println("Septiembre"); break;
        case 10: System.out.println("Octubre"); break;
        case 11: S ystem.out.println("Noviembre"); break;
        case 12: System.out.println("Diciembre"); break;
        default: System.out.println("Este mes no existe"); break;
     }
  }
}

Ahora un ejemplo más complicado, un programa que calcule el número de días
de un mes determinado cuando se da el año.
Anotar primero, los meses que tienen 31 días y los que tienen 30 días. El mes de
Febrero (2º mes) es el más complicado ya que tiene 28 días excepto en los años
que son bisiestos que tiene 29. Son bisiestos los años múltiplos de cuatro, que no
sean múltiplos de 100, pero si son bisiestos los múltiplos de 400.

public class TestSwitch2 {
   public static void main(String[] args) {
     int mes=2;
     int año=1992;
     int numDias=30;
     switch (mes) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
           numDias = 31;
           break;
        case 4:
        case 6:
        case 9:
        case 11:
           numDias = 30;
           break;
        case 2:
           if ( ((año % 4 == 0) && !(año % 100 == 0)) || (año % 400 == 0) )
               numDias = 29;
           else
               numDias = 28;
           break;
        default:
           System.out.println("Este mes no existe");
           break;
     }
     System.out.println("El mes "+mes+" del año "+año+" tiene "+numDias+"
días");
   }
}


No hay comentarios:

Publicar un comentario