Ejercicio 3. ¿Son vocales?

Algoritmo que pida caracteres e imprima ‘VOCAL’ si son vocales y ‘NO VOCAL’ en caso contrario, el programa termina cuando se introduce un espacio.

En este ejercicio debemos pedir al cliente que introduzca una cadena de caracteres y posteriormente debemos analizarla para ver si se han incluido sólo vocales o hay algún otro tipo de carácter.

El programa debe repetirse de forma continua hasta que el usuario introduzca un espacio como respuesta a la petición de la cadena.

Bucle continuo para repetición del programa.

Como vemos, este ejercicio nos solicita algo que hasta el momento no habíamos llevado a cabo, se trata de realizar un programa que pida de forma indefinida una cadena de caracteres y finalice sólo cuando introduzcamos un espacio.

Para hacer este tipo de estructura, debemos crear un primer while o do-while que envuelva prácticamente la totalidad del ejercicio (salvo enunciado o aquella parte que no quieras repetir)

Explicamos funcionamiento del programa.
pedimos primera cadena y explicamos que si pulsas un espacio termina el programa.
while (cadena != " ") {
analizamos cadena
mostramos respuesta sobre si son vocales o no.
pedimos cadena y explicamos que si pulsas un espacio termina el programa.
}

Termina el programa

Esta estructura nos permitiría realizar de forma indeterminada el ciclo tantas veces como desee el usuario hasta que decida terminar el programa.

Analizamos la cadena

En la segunda parte de este ejercicio, una vez dentro del while, debemos analizar si los caracteres introducidos en lo que nosotros hemos llamado cadena (String) son vocales o no. Para ello debemos saber dos cosas, longitud de la cadena, y cómo leer cada posición.

Longitud de la cadena: cadena.length();
La clase String dispone de un método llamado length() el cual nos devuelve el número de caracteres que tiene la cadena.

Lectura de carácter de una cadena: cadena.charAt(posición);
La clase String, también dispone de un método que nos permite leer cada posición de la cadena introducida, charAt(posición). Para el uso de este método, debes tener en cuenta que las posiciones en JAVA empiezan desde el índice 0. Para facilitar la comparación posterior, podemos mezclarlo con el método toUpperCase() de forma que siempre obtengamos el carácter en mayúscula (cadena.toUpperCase().charAt (contador);)

Recorrer la cadena y comprobar si los caracteres son vocales:
Con los dos métodos anteriores, podemos obtener los datos que necesitamos para hacer un bucle que nos permita recorrer cada una de las posiciones de la cadena y poder evaluar qué contiene.

  • longitud es el resultado de aplicar cadena.length();
  • caracter es el resultado de leer la posición determinada de la cadena.

Para recorrer la cadena, haremos uso de un bucle for, el cual, nos permitirá avanzar en cada posición de la cadena mediante un contador, por convenio suele utilizarse i para este variable.

for (int i = 0; i < longitud; i++) {
caracter = cadena.toUpperCase().charAt(i);
if (caracter == 'A' || caracter == 'E' || caracter == 'I' || caracter == 'O' || caracter == 'U'){
vocal = true;
} else {
vocal = false;
break;
}

if (vocal) {
los caracteres son vocales
} else {
los caracteres introducidos no son vocales
}
}

Como vemos en el fragmento anterior, el bucle for en Java, nos permite declarar la variable contador en la primera parte de la estructura, después presentamos la condición y en la tercera parte, el incremento del contador. De forma que esto lo podríamos leer Para i = 0 y mientras i sea menor que la longitud, haz lo que aparece más abajo y después incrementa i en 1.

Con este bucle, caracter iría cogiendo el valor de cada posición (aumentaría en 1 con cada ciclo) y podríamos valorarlo mediante el if que le sigue.

En la parte cursiva, vemos que hemos especificado la estructura if que nos permitirá valorar si lo que contiene caracter en ese momento es una vocal o no.

  • Si caracter = (A, E, I, O, U), la variable booleana vocal tendrá un valor true
  • Si caracter != (A, E, I, O, U), la variable booleana vocal tendrá un valor false y a continuación incluimos la expresión break; que hará que la lectura de nuestro programa salga directamente del ciclo for.

Cuando salimos del ciclo for, debemos evaluar si el valor de la variable vocal es true o false, dependiendo del resultado mostrará si son vocales o no.

package estructurasRepetitivas;

/**
03 Ejercicios Estructuras Repetitivas en Java

Programa:
Algoritmo que pida caracteres e imprima ‘VOCAL’ si son vocales y ‘NO VOCAL’ en caso
contrario, el programa termina cuando se introduce un espacio.

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

import java.util.Scanner;
// Inicio del programa y declaración de variables:
public class Ej03Vocal {
  public static void main(String[] args){
    Scanner scanner = new Scanner(System.in);
    String cadena;
    int longitud;
    char caracter;
    boolean vocal = true;

// Solicitud de datos al usuario
    System.out.println("El programa analizará si los carácteres son vocales o no.");
    System.out.print("Introduce los carácteres a analizar, en caso de querer terminar "
        + "el programa, introduce un espacio: ");
    cadena = scanner.nextLine();

    while (!cadena.equals(" ")){
      longitud = cadena.length();
      for (int i=0;(i < longitud);i++){
        caracter = cadena.toUpperCase().charAt(i);
        if (caracter == 'A' || caracter == 'E' || caracter == 'I' || caracter == 'O' || caracter == 'U'){
          vocal = true;
        } else {
          vocal =false;
          cadena = " ";
          break;
        }
      }
      if (vocal){
        System.out.println("Los carácteres son VOCALES.");
       } else {
         System.out.println("Los carácteres NO SON VOCALES");
       }
      System.out.print("Introduce nuevos carácteres a analizar, en caso de querer terminar "
          + "el programa, introduce un espacio: ");
      cadena = scanner.nextLine(); 
     }
    System.out.println("FIN DEL PROGRAMA");
  }
}

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!