Un ejemplo sencillo que nos habéis pedido es el de cómo podemos saber cuántas vocales abiertas y cerradas con Java hay dentro de una frase. Es otro claro ejemplo de cómo recorrer una cadena e ir acumulando valores como ya vimos en el ejemplo de contar vocales con Java.
Lo primero, lógicamente, será crear la frase. Para ello la vamos a pedir por consola y nos vamos a valer de la clase Scanner
para leer la frase
System.out.println("Introduce una frase y pulsa intro."); Scanner reader = new Scanner(System.in); String frase = reader.nextLine();
Vemos que aplicamos la clase Scanner
sobre el objeto System.in
que es la entrada del teclado.
Si quieres saber más sobre como utilizar la clase
Scanner
puedes echarle un ojo a Lectura de datos en Java con Scanner.
Además nos apoyamos en el método .nextLine()
que es el que lee la frase que hayamos tecleado hasta pulsar el intro.
Una vez que tenemos la frase, lo que vamos a hacer es recorrerla mediante un bucle for. Desde el carácter inicial que es el cero, hasta la longitud de la cadena que la tenemos el método .length()
for (int x=0;x<s.length();x++) {}
Lo que haremos cada vez que itere el bucle es comprobar si el carácter es una vocal abierta, es decir, ‘a’, ‘e’, ‘o’ o bien es una vocal cerrada ‘i’, ‘u’. Para poder acceder al carácter vamos a utilizar el método .charAt()
, el cual recibe la posición en la cadena y nos devuelve el bucle.
for (int x=0;x<s.length();x++) { if ((s.charAt(x)=='a') || (s.charAt(x)=='e') || (s.charAt(x)=='o')) // Vocal Abierta else if ((s.charAt(x)=='i') || (s.charAt(x)=='u')) // Vocal cerrada }
Ahora hay que incrementar el contador en el cual tenemos las vocales abiertas y el contador en el que tenemos las vocales cerradas. En este caso lo vamos a hacer algo diferente y es que vamos a crear un array dónde la primera posición será el contador de las vocales abiertas y la segunda posición las vocales cerradas.
int[] abiertaCerrada = {0,0}; for (int x=0;x<s.length();x++) { if ((s.charAt(x)=='a') || (s.charAt(x)=='e') || (s.charAt(x)=='o')) abiertaCerrada[0] = abiertaCerrada[0] + 1; else if ((s.charAt(x)=='i') || (s.charAt(x)=='u')) abiertaCerrada[1] = abiertaCerrada[1] + 1; }
Solo nos quedará controlar una cosa y es que el usuario puede haber introducido caracteres en minúscula y caracteres en mayúscula. En este caso podríamos controlar ambos tipos, pero por tener un código más sencillo, lo que vamos a hacer es convertir la frase a minúsculas con el método .toLowerCase()
.
Quedándonos el código final de la siguiente forma:
int[] abiertaCerrada = {0,0}; s = s.toLowerCase(); for (int x=0;x<s.length();x++) { if ((s.charAt(x)=='a') || (s.charAt(x)=='e') || (s.charAt(x)=='o')) abiertaCerrada[0] = abiertaCerrada[0] + 1; else if ((s.charAt(x)=='i') || (s.charAt(x)=='u')) abiertaCerrada[1] = abiertaCerrada[1] + 1; }
Espero que os resulte sencillo el código que nos permite identificar las vocales abiertas y cerradas con Java dentro de una frase.