Ejercicio 8. Matrícula

Realiza un programa que calcule la aceptación de una solicitud en base a los siguientes parámetros: edad, nota y sexo.
* Mínimo: Nota (5), edad (18), sexo M –> POSIBLE
* Mínimo: Nota (5), edad (18), sexo F –> ACEPTADA
* Otros casos –> NO ACEPTADA

Para la realización de este programa debemos pedir tres variables por teclado nota, edad (int) y sexo (String).

Tenemos que tener en cuenta, que en el caso del sexo, puede introducirse un valor que no sea M ó F que son los valores que daremos por correctos, con lo que vamos a controlarlo también mostrando un error en el que indique que el valor incluido es incorrecto.

Analicemos paso a paso las comparaciones que haremos para obtener los resultados que deseamos.

Si (sexo es distinto a “M” y sexo es distinto a “F”)
-> Error, el valor introducido para sexo es incorrecto.
Si (sexo = M y nota >= 5 y edad >= 18)
-> POSIBLE
Si (sexo = F y nota >= 5 y edad >= 18)
-> ACEPTADA
Si no
-> NO ACEPTADA

Como hemos visto, comprobamos si sexo tiene uno de los dos valores admitidos. Para ello, también vamos a utilizar una de los métodos que tienen las variables tipo String, que nos permitirá convertir a mayúsculas toda la cadena para así poder hacer la comparación.

Esta sentencia, nos permitirá que nuestro programa pueda comparar el valor introducido por el usuario, y darlo por bueno, tanto si lo incluye en mayúscula como en minúscula.

variable.toUpperCase();

Como vimos en el Ejercicio 6, hay dos funciones que nos pueden servir para comparar variables de tipo String.

En aquel ejercicio, finalmente hicimos uso de compareTo, en esta ocasión, nos decantaremos por el uso de equals, ya que deseamos saber sólo si son iguales o no.

Importante

En este ejercicio también nos encontramos ante un caso bastante interesante, como vemos, en la línea 31 de nuestro código, realizamos un doble uso de la función scanner, leemos por un lado el número entero que corresponde a la variable nota, pero a continuación, incluimos scanner.nextLine();

Esto tiene una función para liberar la caché, ya que posteriormente leeremos una variable de tipo String ¿y qué tiene esto que ver?

Pues se produce, porque cuando utilizamos scanner.nextInt(); la función sólo lee el número entero que se haya introducido, pero en el “buffer”, quedaría también el INTRO pulsado para enviar la variable. Entonces, si después el programa continúa leyendo y asignando el valor de la variable sexo, le asignaría directamente el valor INTRO, sin darnos tiempo a introducir por teclado esta variable. Por tanto, este scanner.nextLine() que introducimos, lo único que hace es limpiar el buffer, para que así la variable sexo quede a la espera de un nuevo valor introducido.

package estructurasAlternativas;

/**
08 Ejercicios Estructuras Alternativas en Java

Programa:
Algoritmo que pida dos números ‘nota’ y ‘edad’ y un carácter ‘sexo’ y muestre el 
mensaje ‘ACEPTADA’ si la nota es mayor o igual a cinco, la edad es mayor o igual a 
dieciocho y el sexo es ‘F’. En caso de que se cumpla lo mismo, pero el sexo sea ‘M’, debe 
imprimir ‘POSIBLE’. Si no se cumplen dichas condiciones se debe mostrar ‘NO ACEPTADA’.

@author: manolohidalgo_
@date: 09-11-19
*/

import java.util.Scanner;
// Inicio del programa y declaración de variables:
public class Ejercicio08Solicitud {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int nota;
    int edad;
    String sexo;

// Solicitud de datos al usuario
    System.out.println("Este programa nos calcula la aceptación de una solicitud"
        + " en base a los siguientes parámetros:");
    System.out.print("Edad: ");
    edad = scanner.nextInt();
    System.out.print("Nota: ");
    nota = scanner.nextInt(); scanner.nextLine();
    System.out.print("Sexo (M o F): ");
    sexo = scanner.nextLine();
    
// Realizamos Cálculos y mostramos en pantalla
    if (!sexo.toUpperCase().equals("M") && !sexo.toUpperCase().equals("F")) {
      System.out.println("El valor de sexo introducido es incorrecto.\n"
          + "por favor, reenvíe el formulario.");
    } else if ((nota > 5) && (edad > 18) && (sexo.toUpperCase().equals("M"))) {
      System.out.println("POSIBLE");
    }else if ((nota > 5) && (edad > 18) && (sexo.toUpperCase().equals("F"))) {
       System.out.println("ACEPTADA");
    }else {
        System.out.println("NO ACEPTADA");
    }
    }
  }

Puedes acceder a este ejercicio en GitHub en este enlace

Si tienes alguna duda al respecto, alguna sugerencia o algo que no te haya quedado claro, no tienes más que escribirme en los comentarios, estoy aquí para ayudarte y aprender, ¡Nos leemos!