Estructuras de Control: Alternativas o de selección

Cuando hablabamos de algoritmos(Ver tutorial03) deciamos que es una secuencia de pasos, Ordena, Finita que incluye Toma de Descisiones y Repetión de pasos. hablabamos de las estructuras de control.

Estas estructuras son las que determinan que instrucciones o sentencias deben ejecutarse y cuantas veces repetirse. Existen de 2 tipos:

  • Alternativas o de selección: If/Else, Switch
  • Repetitivas o de iteracción: While, Do/While, For

If

El bloque de selección "If" nos permite evaluar una declaración para tomar una desición. IF del inglés "si (condicional)" actúa arrojando 2 resultados posibles: Verdadero o falso, y dependiendo de esto ejecutará las sentencias dentro del bloque o de lo contrario se saltará por completo el bloque y seguirá con el código.

Para evaluar estas sentencias utilizaremos los operadores "Relacionales" y "Lógicos" (Ver Tutorial05)

  • Operadores Relacionales:
    • >     Mayor que
    • <     Menor que
    • ==     Igual
    • !=     Distinto
    • >=     Mayor o igual que
    • <=     Menor o igual que
  • Operadores Lógicos:
    • &&     'OR' devuelve true si todos operandos son verdaderos.
    • ||     'AND' devuelve true si alguno de los operandos es verdadero.
    • !     'NOT' Niega el operando que se le pasa.

El siguiente código nos muestra como evaluar un entero, si es "mayor que" y definimos la comparación con un 21 se imprimirá un pequeño texto.

  1. public class Condicional{
  2.     public static void main(String[]args){
  3.         int edad = 25;
  4.         if(edad > 21){
  5.             System.out.println("Eres mayor de edad");
  6.         }
  7.     }
  8. }

Y si pensensamos en el caso contrario, por ejemplo 'edad' es 20, entonces el código estará bien construido pero no hará nada, dado que la condición es negativa o falsa y se saltará el bloque if y luego termina nuestro programa.

If/Else

Para solucionar el ejemplo anterior y contemplar los 2 casos del if, tenemos la selección "If/Else"

Donde se seguirá evaluando la condicíon del if pero al resultar falso ejecutará el bloque del else obligatoriamente.

Para solucionar el problema que se nos presentaba estaba vez sea cual sea la edad nos mostrará un mensaje por pantalla

  1. public class Condicional{
  2.     public static void main(String[]args){
  3.         int edad = 20;
  4.         if(edad > 21){
  5.             System.out.println("Eres mayor de edad");
  6.         }else
  7.             System.out.println("Lo sentimos no tenés la edad suficiente");
  8.     }
  9. }

NOTA: Tanto el if y el else pueden ir sin llaves "{}" cuando sólo ejecutan una sola sentencia.

Operador Ternario

El operador ternario funciona de la misma manera que un if/else.

Por ejemplo simplificamos una estructura if/else poniéndolo dentro del método System.out

  1. String genero = "hombre";
  2. if(genero.equals("hombre"))
  3.     System.out.println("Sr");
  4. else
  5.     System.out.println("Sra");

  1. String genero = "hombre";
  2. System.out.println(genero.equals("hombre)?"Sr":"Sra");

If Anidados

Podemos evaluar otras condiciones dentro y fuera de nuestros if/else y hacer tantas combinaciones como deseemos

Materializando los 2 diagramas:

  1. public class Anidados{
  2.     public static void main(String[] args){
  3.         boolean logico = false;
  4.         if(logico){
  5.             System.out.println("En la evaluación de un booleano basta con poner su nombre para saber si es verdadera ejecutará esta linea.");
  6.         }else if(num != 0){
  7.             System.out.println("Evaluamos un entero con el operador distinto.");
  8.         }else {
  9.             //No hacemos nada aquí.
  10.         }
  11.     }
  12. }

  1. public class Anidados{
  2.     public static void main(String[] args){
  3.         float pi = 3.14f;
  4.         double e = 2.718281828;
  5.         long enteroLargo = 12345678987654321L;
  6.         char letra = 'd';
  7.         if(pi >= e){
  8.             System.out.println("El numero flotante necesita una f al final para identificarlo");
  9.             if(letra == 'd' && enteroLargo < 0){
  10.                 System.out.println("Los tipo char va con comillas simples");
  11.                 System.out.println("Por cierto utilizamos el operador AND para que ambas condiciones sean ciertas para que esto se ejecute");
  12.             }else {
  13.             //No hacemos nada aquí.
  14.             }
  15.         }else {
  16.             //Podemos omitir los else si estan vacios.
  17.         }
  18.     }
  19. }

Switch

Existen ciertas ocaciones en que necesitamos dar con un opción y hacerlo con Ifs anidados se vuelve algo engorroso. Por eso tenemos la última seleccíon: Switch

El switch(Interruptor) evalua una declaración y ejecuta un solo trozo de código dentro del bloque del caso indicado de acuerdo a la evaluación. Incluye 2 palabras reservadas nuevas:

  • "case" para indicar si es igual a un valor dado y ejecutar ese segmento.
  • "break" para indicar que rompa con el bloque switch y continue fuera de el, de lo contrario ejecutaría los segmentos de los demás casos por debajo hasta el final.

En el siguiente ejemplo evaluamos un entero "notaFinal" y los posibles casos estan "agrupados" para mostrar el mismo resultado, asi 0,1,2 y 3 mostrarán el resultado de "Desaprobado", etc. porque no incluimos el "break" por lo tanto 7 no tiene instrucciones pero sigue ejecutando el caso 8 donde encuentra un break que termina el switch.

  1. public class Interruptor{
  2.     public static void main(String[]args){
  3.         int notaFinal = 7;
  4.         switch(notaFinal){
  5.             case 0:
  6.             case 1:
  7.             case 2:
  8.             case 3:
  9.                 System.out.println("Desaprobado");
  10.                 break;
  11.             case 4:
  12.             case 5:
  13.             case 6:
  14.                 System.out.println("Regular");
  15.                 break;
  16.             case 7:
  17.             case 8:
  18.                 System.out.println("Aprobado");
  19.                 break;
  20.             case 9:
  21.             case 10:
  22.                 System.out.println("Exelente");
  23.                 break;
  24.         }
  25.     }
  26. }

No hay comentarios:

Publicar un comentario