Ejercicio 6. ¿Letra mayúscula?

Realiza un programa que lea una cadena por teclado y compruebe si es una letra mayúscula.

Para realizar este ejercicio debemos analizar varios factores y comprobar las condiciones que necesitamos para que el programa cumpla con los requisitos necesarios.

En primer lugar, vamos a pedir por teclado una cadena, lo cual implica, que el usuario podrá introducir desde uno o varios caracteres, y además, estos podrán ser numéricos (pero funcionando como texto), símbolos, letras minúsculas, mayúsculas, etc.

Por este motivo, la primera condición que debe cumplirse es:

longitud de la cadena = 1

La siguiente condición que debe cumplirse, es que el valor sea uno de los siguientes:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Ñ

Como ves, he remarcado la Ñ, que será el carácter que nos dará algún problema, ¿Por qué?

Muy sencillo, no podemos realizar la comprobación de la cadena carácter a carácter, ni con 27 casos en un switch ni con una infinidad de else if… sería incongruente. Entonces debemos saber el funcionamiento a la hora de comparar de Java.

Java comparará los caracteres asignándoles su valor ASCII, los cuales podemos observar en la siguiente tabla:

Si te fijas, las letras mayúsculas, de la A a la Z están todas de forma correlativa, desde el número 65 al 90. Por tanto, deberíamos hacer la siguiente comparación:

cadena >= “A” y cadena <= “Z

Con esto, obtendríamos si la cadena tiene un valor que se encuentre entre A y Z… pero como ya anticipábamos… ¿qué pasa con la Ñ? Si quisiéramos afinar más, también tendríamos que añadir caracteres como Á, É… pero para un ejercicio de aprendizaje, sería demasiado rizar el rizo, y a fin de cuentas sería añadir ||’s por cada uno de ellos.

En resumen, nuestra condición tendrá dos partes, una obligatoria, que la cadena tenga la longitud de 1, y la segunda parte, estará compuesta por dos condiciones, una compuesta (cadena >= “A” y cadena <= “Z”) y la otra cadena = “Ñ”, estas dos, nos valdría con que se cumpliese al menos una, por lo tanto, las uniremos con el operador lógico or ||.

longitudCadena == 1 && ((cadena >= “A” && cadena <= “Z”) || cadena = “Ñ”)

Hasta este ejercicio, siempre hemos comparado valores numéricos, en este caso, debemos comparar también una variable tipo String donde encontraremos una diferencia muy importante.

Para comparar dos cadenas, tenemos dos funciones que podemos utilizar, si queremos saber si es igual, podemos hacerlo mediante

variable.equals(cadenaAComparar);

Esta forma, nos devolverá true o false, de forma que nos dirá si son iguales o no ambas cosas.

(variable.compareTo(cadenaAComparar) == 0);

En este caso, nos permite operar con el valor ASCII de la cadena, de forma que donde encontramos el operador , podemos incluir los operadores de comparación habituales.

package estructurasAlternativas;

import java.util.Scanner;

/*
06 Ejercicios Estructuras Alternativas en Java

Programa:
Programa que lea una cadena por teclado y compruebe si es una letra mayúscula.

Autor: Manuel Hidalgo Pérez
Fecha: 08-11-19

Variables a utilizar:
    * cadena (string)
ALGORITMO
    - LEER cadena
    - Cálculos
    *   si longitud cadena != 1 --> No es una letra mayúscula
    *       si cadena > A y <Z --> Es una letra mayúscula
            sino --> No es una letra mayúscula
    - MOSTRAR resultado
*/

// Inicio del programa y declaración de variables:
public class Ejercicio06LetraMayuscula {
  public static void main(String[] args) {
    Scanner scanner = new Scanner (System.in);
    String cadena;

// Solicitud de datos al usuario
    System.out.println("Este programa nos pide una cadena y comprueba si es una letra mayúscula.");
    System.out.print("Introduce la cadena que desees: ");
    cadena = scanner.nextLine();
    
// Realizamos Cálculos y mostramos en pantalla
    if (cadena.length() != 1){
      System.out.println("La cadena no es una letra mayúscula");
   // }else if ((cadena > "A") && (cadena < "Z")) {
    }else if ((cadena.compareTo("A") >= 0) && (cadena.compareTo("Z")<=0)) {
       System.out.println("La cadena es una letra mayúscula.");
    }else {
        System.out.println("La cadena no es una letra mayúscula.");
    }
    }
  }

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!