viernes, 21 de octubre de 2016

9-Los Condicionales en Java. If, else, switch y el operador ternario

Cuando estamos creando un programa necesitaremos utilizar condicionales para decirle al programa que ejecute un código si se cumple la condición, o que se ejecute otro código si la condición no se cumple. Veremos los condicionales que podemos utilizar en Java, como if, if-else y switch. Además veremos también el uso del operador ternario.

9.1-Condicional if


El condicional if es el más básico y más sencillo de utilizar. Comprueba que una condición sea verdadera o falsa. Tiene la siguiente estructura:

if(condicion){

          

        }


En (condicion) se pone la condición que queremos que compruebe si es verdadera o falsa. En caso de ser verdadera ejecutará las sentencias que estén dentro del bloque (lo que esté dentro de las llaves {{}).

int saldo = -52;

        if(saldo < 0){

            System.out.println("Está en números rojos");

        }

    }


En el ejemplo anterior creamos una variable de tipo entero con valor -52. Luego creamos un condicional if con la condición de que si el saldo es menor que 0 entonces ejecute la sentencia que se encuentra entre llaves. La condición en el condicional if SIEMPRE van entre paréntesis seguido del bloque de llaves que contendrá la sentencias a ejecutar si la condición es verdadera.
Como la condición es verdadera, imprimirá por consola "Está en números rojos". Podéis comprobar vosotros mismos que si cambiáis el valor de la variable saldo a un número positivo y ejecutamos el programa no se ejecutará ninguna sentencia porque la condición sería falsa.

En un tutorial anterior vimos ya los operadores que podíamos utilizar y, en los condicionales los utilizaremos mucho. Podremos utilizar los operadores:

  • Mayor que >
  • Menor que <
  • Mayor igual que >=
  • Menor igual que <=
  • Distinto a !=
  • Igual a ==
  • Operador o ||
  • Operador y &&
El operador O(||) y el operador Y(&&) se utilizan mucho para, por ejemplo, si queremos que en una condición se cumplan dos condiciones utilizaremos el operador &&:

if(vidas < 2 && cansancio < 10){

         System.out.println("Está a punto de perder la partida");

     }


En el código anterior para que se muestro por pantalla "Está a punto de perder la partida" se mostrará si y solo si se cumplen las dos condiciones, es decir, que las vidas sean menor de 2 y que el cansancio sea menor de 10. La condición anterior se leerá: Si las vidas es menor a 2 Y cansancio es menor a 10 entonces ejecuta el código que esté dentro del bloque(las llaves {})
Si quisiéramos que mostrase por pantalla el mensaje si se cumple algunas de esas dos utilizaríamos el operador ||:

if(vidas < 2 || cansancio < 10){

         System.out.println("Está a punto de perder la partida");

     }


En este caso se mostrará por pantalla el mensaje si se cumple algunas de las dos condiciones, con sólo cumplirse una de las condiciones el mensaje se mostrará. La condición se lee de la siguiente forma: si vidas es menor a 2 O cansancio menor a 10 entonces..... y ejecuta el código que esté dentro de las llaves.
El operador == no hay que confundirlo con el operador de asignación =. El operador de asignación = lo utilizamos para asignar a una variable un valor, pero en una condición no podemos utilizar por ejemplo if(saldo = 100) porque saldría error, ya que lo que intentaría hacer ese código es asignar el valor de la variable saldo a 100 y lo que queremos hacer es comparar si la variable saldo es igual a 100 o no lo es, es decir, para comparar un valor con una variable utilizamos el operador ==.
Hemos visto que las sentencias a ejecutar si la condición es verdadera iba entre llaves, encerradas en bloque, pero no es obligatorio utilizar las llaves en caso de que queramos poner una sentencia. Por ejemplo la siguiente instrucción sería válida
if(saldo < 0) System.out.println("Está en números rojos");
Se coloca la sentencia a ejecutar si la condición es válida seguido del condicional if. Si vamos a poner más de una sentencia si la condición es verdadera entonces sí que debemos encerrarlas en bloques ({}).

class Condicionales {

    public static void main(String[] args) {

        int jugadorPuntuacion = 5623;

        int vidasJugador = 3;

        int dificultadNivel = 23;

        

        if(jugadorPuntuacion > 5000){

            vidasJugador++;

            System.out.println("Vida extra conseguida!!!");

            dificultadNivel += 3;

        }

        

        System.out.println("Puntuación jugador: " + jugadorPuntuacion);

        System.out.println("Vidas jugador: " + vidasJugador);

        System.out.println("Dificultad del nivel: " + dificultadNivel);

    }

}


9.2-Condicional if-else

Hemos visto cómo utilizar el condicional if e indicar a Java qué hacer si la afirmación es correcta pero, ¿Podemos hacer que el programa realice ciertas acciones si la afirmación es falsa? Así es, podemos también ejecutar las sentencias o instrucciones que indiquemos cuando la afirmación sea falsa.
La forma de hacerlo es con el condicional if-else:

class Condicionales {

    public static void main(String[] args) {

        int notaMedia = 7;

      

        if(notaMedia >= 5){

            System.out.println("Enhorabuena, pasas al siguiente curso");

        }else{

            System.out.println("Lo sentimos, deberá de repetir curso");

        }

    }

}


Observamos que creamos el condicional if como ya habíamos explicado y después de la llave de cierre ponemos el else y dentro del bloque (llaves {}) colocamos las sentencias que queramos que se ejecuten si no se cumple la condición, es decir, si la nota media es igual o superior a 5 entonces mostrará un mensaje indicando que pasa de curso, en caso contrario mostrará un mensaje de que repite el curso.
También se puede utilizar el else para encadenar varias instrucciones if como vemos a continuación:
class Condicionales {

    public static void main(String[] args) {

        char grupo = 'C';

      

        if(grupo == 'A') {

            System.out.println("Le han asignado el grupo A");

        }else if(grupo == 'B') {

            System.out.println("Le han asignado el grupo B");

        }else if(grupo == 'C') {

            System.out.println("Le han asignado el grupo C");

        }else{

            System.out.println("Le han asignado el grupo general");

        }

    }

}


En el ejemplo anterior lo que realiza el código es crear un condicional if que ejecutará un mensaje si el grupo es A, luego, utilizando else if se ponen más condicionales if, que en este caso uno muestra otro mensaje si el grupo es B, se muestra otro mensaje distinto si el grupo es C y en caso de que ninguno de ellos fuese A, B o C entonces mostrará otro mensaje.
Con el else no hace falta pasarle ninguna condición, si el código anterior al else no se cumple entonces se ejecutará las instrucciones del else.

Hay que tener en cuenta que, si la condición que escribimos es un String o un tipo char (como la variable grupo del ejemplo anterior) hay que ponerla entre comillas dobles o simples respectivamente, igual que hacemos al declarar esas variables. Por ejemplo:

if(texto == "Hola"){

     //Sentencias a ejecutar si la condición es verdadera     

        }



9.3-Condicional switch

Hemos visto hasta ahora los condicionales if y if-else que son muy útiles cuando hay dos posibles condiciones, pero en ocasiones nos podemos encontrar con que tenemos que manejar más de dos condiciones. Para estos casos utilizaremos switch. En el siguiente ejemplo se ve cómo funciona este condicional:

public class CondicionalSwitch{

    public static void main(String[] args) {

        //Variable entera de nombre numMes con valor 8

        int numMes = 8;


      



        //Creamos el condicional switch

        switch(numMes){

            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:

                System.out.println("Noviembre");

                break;

            default:

                System.out.println("Diciembre");

        }

    }

}


Para utilizar el condicional switch primero ponemos la palabra reservada switch y entre paréntesis se especifica la variable a comprobar,  luego abrimos llaves '{' para introducir todas las condiciones dentro de un bloque.
Para indicar cada condición utilizamos la palabra reservada case seguido del valor y dos puntos ':'. Cada instrucción case comprueba la variable de prueba de la instrucción switch con respecto a un valor concreto. El valor usado en una instrucción case puede ser un carácter, un entero o una cadena. Finalmente ponemos un break; para que si es esa la condición verdadera no siga comprobando más condiciones, es decir si la condición es verdadera se ejecuta el break y se sale del condicional switch.
Si nos fijamos hemos utilizado un default, este se utiliza de la misma forma que un case pero con la diferencia de que no ponemos valor a la condición. Un default funciona de la misma forma que vimos con un else, es decir, que si ninguna de las condiciones anteriores son verdaderas  entonces ejecutará lo que se incluya dentro del default. En el código de ejemplo anterior, si ponemos a la variable numMes el valor de 45 nos saldrá por consola que el mes es Diciembre.

9.4-Operador Ternario

El operador ternario es la instrucción condicional más complicada en el lenguaje de Java. Se puede usar para asignar un valor o mostrarlo en función de una condición. Por ejemplo, imaginemos que tenemos un videojuego en el que se establece la variable enemigos en función del nivel en el que nos encontremos. Se podría emplear la siguiente instrucción:

if(nivel > 10) {

            enemigos = 30;

        }else{

            enemigos = 10;

        }


En vez de utilizar los condicionales if-else se podría utilizar el operador ternario que es una forma más breve de hacer lo mismo que el código anterior. El operador ternario contiene 5 partes:

  1. La condición que probar, entre paréntesis, como en  (nivel > 10)
  2. Un signo de interrogación (?)
  3. El valor que emplear si la condición es verdadera
  4. Dos puntos (:)
  5. El valor que usar si la condición es falsa.
Con el operador ternario el código anterior quedaría de la siguiente forma:

int enemigos = (nivel > 10) ? 30 : 10;

Como se puede observar se simplifica mucho la escritura, aunque puede resultar lioso y difícil de entender.

A continuación vamos a ver un programa totalmente operativo en el que veremos los condicionales que hemos estudiado en este tutorial.

import java.util.*;



class Calendario {

    public static void main(String[] args) {

        //Obtener la hora y fechas actuales utilizando la clase Calendar. No hace falta entender cómo

        //funciona, sólo saber que esta clase es la que nos proporcionará el mes, la hora, los minutos,

        //día y año actuales.

        Calendar ahora = Calendar.getInstance();

        int hora = ahora.get(Calendar.HOUR_OF_DAY);

        int minutos = ahora.get(Calendar.MINUTE);

        int mes = ahora.get(Calendar.MONTH) + 1; //El +1 es porque los meses empiezan a contar en 0

        //y al poner +1 Enero será el mes con valor 1 y no con valor 0.

        int dia = ahora.get(Calendar.DAY_OF_MONTH);

        int año = ahora.get(Calendar.YEAR);

      

        //Mostramos el saludo

        if(hora < 12){

            System.out.println("Buenos días.\n");

        }else if(hora < 20){

            System.out.println("Buenas tardes\n");

        }else{

            System.out.println("Buenas noches\n");

        }

      

        //Mostrar la hora

      

        /*

        Uso del operador ternario en el que si la hora es igual a 1 o  13

        entonces muestra son la en vez de son las.

        */

        System.out.print((hora == 1 || hora == 13) ? ("Son la: " + hora) :

                "Son las: " +hora);

      

        //Mostrar los minutos

        System.out.print(" ");

        System.out.print("y ");

        if(minutos == 1){

            System.out.print(minutos + " minuto.");

        }else{

            System.out.println(minutos + " minutos.");

        }

      

        //Mostrar el nombre del mes utilizando switch

        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:

                System.out.println("Noviembre");

                break;

            default:

                System.out.println("Diciembre");

        }

        //Mostrar la fecha y el año

        System.out.println(" " + dia + ", " + año + ".");

    }

}


Lo más probable es que no entendáis todavía la clase Calendar ni cómo se ha declarado y porqué,  pero eso todavía no lo hemos visto, sólo hay que fijarse en el uso de los condicionales.

Ejercicios Tutorial 9:


Ejercicio 1
Realiza un programa que lea un número entero e indique si es par, de acuerdo con el formato de la siguiente captura:



Solución:


Ejercicio 2

Realiza un programa que lea un mes en formato numérico y un año e indique el número de días de ese mes. Para realizar este ejercicio hay que tener en cuenta que un año es bisiesto si es divisible por cuatro, excepto cuando es divisible por 100, a no ser que sea divisible por 400. La salida debe ajustarse al formato de la siguiente captura:



Solución:


Ejercicio 3

Escribe un programa que solicite a un usuario su nombre y edad. Debe mostrarse cuantos años tendrá dentro de una década y clasificarle según su edad en A[0-25], B[26-50], C[51-...].

Solución:



Hasta aquí el tutorial de los condicionales en Java, en el siguiente tutorial estudiaremos los bucles en Java.

No hay comentarios:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...