Saltar a contenido

Estructuras de selección

La estructura condicional determina si se ejecutan unas instrucciones u otras según se cumpla o no una determinada condición.

En Java la estructura condicional se implementa mediante:

  • Instrucción if.
  • Instrucción switch.
  • Instrucción condicional ? :

if

La declaración if es la más básica de todas las declaraciones de flujo de control. Le dice a su programa que ejecute una determinada sección de código solo si una prueba en particular se evalúa como verdadera. Puede ser del tipo:

  • Condicional simple: if
  • Condicional doble: if … else …
  • Condicional múltiple: if … else if …

La condición debe ser una expresión booleana es decir debe dar como resultado un valor booleano (true o false).

Condicional simple

Se evalúa la condición y si esta se cumple se ejecuta una determinada acción o grupo de acciones. En caso contrario se saltan dicho grupo de acciones.

Condicional simple

Si el bloque de instrucciones tiene una sola instrucción no es necesario escribir las llaves { } aunque para evitar confusiones se recomienda escribir las llaves siempre.

/* Programa que pide una nota por teclado y muestra un mensaje si la nota * es mayor o igual que 5 */
import java.util.Scanner;
public class Ejemplo0If {
    public static void main(String[] args ){
        Scanner sc = new Scanner(System.in );
        System.out.print("Nota: ");
        int nota = sc.nextInt();
        if (nota >= 5){
            System.out.println("¡¡Enhorabuena!!");
            System.out.println("Has aprobado");
        }
    }
}

Condicional doble

Se evalúa la condición y si esta se cumple se ejecuta una determinada instrucción o grupo de instrucciones. Si no se cumple se ejecuta otra instrucción o grupo de instrucciones.

Condicional doble
/* Programa que pide una nota por teclado y muestra si se ha aprobado o no */
import java.util.Scanner;
public class Ejemplo0If {
    public static void main( String[] args ){
        Scanner sc = new Scanner( System.in );
        System.out.print("Nota: ");
        int nota = sc.nextInt();
        if (nota >= 5){
            System.out.println("Enorabuena!!");
            System.out.println("Has aprobado");
        } else{
            System.out.println("Lo Siento, has suspendido");
        }
    }
}

Condicional múltiple

Se obtiene anidando sentencias if … else. Permite construir estructuras de selección más complejas.

Condicional múltiple

Cada else se corresponde con el if más próximo que no haya sido emparejado. Una vez que se ejecuta un bloque de instrucciones, la ejecución continúa en la siguiente instrucción que aparezca después de las sentencias if … else anidadas.

/* Programa que muestra un saludo distinto según la hora introducida */
import java.util.Scanner;
public class Ejemplo2If {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int hora;
        System.out.println("Introduzca una hora (un valor entero): ");
        hora = sc.nextInt();
        if (hora >= 0 && hora < 12){
            System.out.println("Buenos días");
        }else if (hora >= 12 && hora < 21){
            System.out.println("Buenas tardes");
        }else if (hora >= 21 && hora < 24){
            System.out.println("Buenas noches");
        }else{
            System.out.println("Hora no válida");
        }
    }
}

Un correcto uso de if junto con else, nos permitirá tener un control sobre las posibilidades que tiene que tener nuestro algoritmo. El concepto es que se emplee la parte del else como el valor por defecto o el valor que queremos mostrar u obtener si no ha ido bien la cosa o los datos no son válidos. Esto es una forma de tener un control de excepciones, que los veremos en profundidad a lo largo del curso.

Switch

Se utiliza para seleccionar una de entre múltiples alternativas. La forma general de la instrucción switch en Java es la siguiente:

Condicional múltiple

La instrucción switch se puede usar con datos de tipo byte, short, char e int. A partir de Java 7 también pueden usarse datos de tipo String en un switch. Funcionamiento de la instrucción switch:

  • Primero se evalúa la expresión y salta al case cuya constante coincida con el valor de la expresión.
  • Se ejecutan las instrucciones que siguen al case seleccionado hasta que se encuentra un break o hasta el final del switch. El break produce un salto a la siguiente instrucción a continuación del switch.
  • Si ninguno de estos casos se cumple se ejecuta el bloque default (si existe). No es obligatorio que exista un bloque default y no tiene porqué ponerse siempre al final, aunque es lo habitual.
/* Programa que pide un número de mes y muestra el nombre correspondiente */
import java.util.Scanner;
public class Ejemplo0Switch {
    public static void main(String[] args) {
        int mes;
        Scanner sc = new Scanner(System.in);
        System.out.print("Introduzca un numero de mes: ");
        mes = sc.nextInt();
        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;
            case 12: System.out.println("DICIEMBRE");
                break;
            default: System.out.println("Mes no válido");
        }
    }
}

Instrucción condicional

Se puede utilizar en sustitución de la sentencia de control if-else. Mediante los caracteres ? y : Se utiliza de la forma siguiente:

expresión1 ? expresión2 : expresión3

Si expresión1 es cierta entonces se evalúa expresión2 y éste será el valor de la expresión condicional. Si expresión1 es falsa, se evalúa expresión3 y éste será el valor de la expresión condicional.

/* programa que pide un número por teclado y calcula si es par o impar */
import java.util.Scanner;
public class Ejemplo1OperadorCondicional {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num; System.out.println("Introduzca numero: ");
        num = sc.nextInt(); System.out.println((num % 2) == 0 ? "PAR" : "IMPAR");
    }
}

Actividades

  • AC 301 (RA3 / CE3a CE3g / IC1 / 3p) En la taquilla de un cine, a una persona menor de 13 años se le cobra la "tarifa para niños". De lo contrario, a una persona se le cobra la "tarifa de adulto". Completa un programa para que a una persona menor de 13 años se le cobre la tarifa de niño, con mostrar un mensaje será suficiente.

  • AR 302 (RA3 / CE3a CE3g / IC1 / 3p) Un hipermercado quiere un programa que calcule el impuesto sobre un aparato electrónico. Un artículo que cuesta 300€ o más tiene un impuesto del 5% (0.05); y un artículo que cuesta menos de 300€ está libre de impuestos. Desarrolla un programa que solicite por teclado un precio, luego calcule e imprima el impuesto y luego imprima el coste total (precio + impuesto).

  • AC 303 (RA3 / CE3a CE3g / IC1 / 3p) Quiero alquilar un coche en una agencia de alquiler de coches. Las condiciones para alquilar un coche son: tener al menos 21 años o más y 10.000 o más euros de crédito en mi tarjeta. Escribe un programa que pida al usuario introducir su edad y su crédito disponible y verifique si es apto para alquilar un coche o no. Muestra un mensaje al usuario de si es apto.

    • ¿Podría alguien con 25 años y 10.000 € alquilar un coche?
    • ¿Y alguien con 21 años y 9000€?
    • ¿Qué pasaría si cambiamos el y por un o, es decir, tener 21 años o más o tener 10.000?

    Explica cómo afectaría a las preguntas anteriores, si obtendríamos el mismo resultado.

  • AC 304 (RA3 / CE3a CE3g / IC1 / 3p) Los sabores de helado se representan como números enteros, donde 0 es vainilla, 1 es chocolate y 2 es fresa. Escribe un switch que pida al usuario un sabor de helado por pantalla y verifique el sabor e imprima el nombre del sabor del helado o imprima "Error" en el caso predeterminado.

  • AP 305 (RA3 / CE3a CE3g / IC1 / 3p) El director de una escuela está organizando un viaje de estudios, y requiere determinar cuánto debe cobrar a cada alumno y cuánto debe pagar a la compañía de viajes por el servicio.

    La forma de cobrar es la siguiente: si son 100 alumnos o más, el costo por cada alumno es de 65.0 euros; de 50 a 99 alumnos, el costo es de 70.5 euros, de 30 a 49, de 95.0 euros, y si son menos de 30, el costo del alquiler del autobús es de 400.0 euros, sin importar el número de alumnos.

    Realiza un programa que permita determinar el pago a la compañía de autobuses y lo que debe pagar cada alumno por el viaje. Al realizar un análisis del problema, se puede deducir que las variables que se requieren como datos son el número de alumnos (NA) que se introducirán por entrada estándar (mediante la clase Scanner), con lo que se puede calcular el pago por alumno (PA) y el costo total del viaje (TOT), que deberán ser mostrados por salida estándar (impresión por pantalla). Determina qué tipo de dato es más adecuado para cada variable.

  • PR 306 (RA3 / CE3a CE3f CE3g / IC2 / 5p) Crea un programa que lea por teclado tres números enteros, calcule el mayor de los tres y lo muestre por salida estándar.

  • PR 307 (RA3 / CE3a CE3f CE3g / IC2 / 5p) Crea un programa que solicite un número de mes, calcule la estación a la que pertenece y la muestre por pantalla.

  • PR 308 (RA3 / CE3a CE3f CE3g / IC2 / 5p) Crea un programa que permita adivinar un número aleatorio entre 0 y 100. El usuario va introduciendo números y el programa le indicará si el número buscado es mayor o menor que el introducido. El proceso finaliza cuando el usuario acierta mostrándose el número de intentos.

    Info

    Para que el programa genere un número al azar utilizamos el método random() que genera un número aleatorio entre 0 y 1. Entonces lo multiplicaremos por 100 y lo convertiremos a entero mediante el mecanismo de casting de tipos.