¡Hola Ogramar!
Te agradezco mucho la observación. He estado pensando de nuevo el ejercicio y he unido los métodos en uno solo. También he modificado el main para que baste con un switch. El código se ha reducido notablemente. Ha quedado así:
import java.util.Stack;
import java.util.Scanner;
public class VerificadorVocales {
public static void main (String [] args) {
Scanner entrada = new Scanner(System.in);
String respuesta = "S";
String cadena="";
while (respuesta.equalsIgnoreCase("S")){
System.out.println ("¿Qué cadena desea analizar?");
cadena=entrada.nextLine();
String textoPorPantalla="";
char[] array = {'a','e','i','o','u'};
for (int i=0; i<array.length; i++) {
switch (analizarVocal(cadena,array[i])){
case 1: textoPorPantalla=textoPorPantalla+"El número de letras "+array[i]+" es par. "; break;
case -1: textoPorPantalla=textoPorPantalla+"El número de letras "+array[i]+" es impar. "; break;
case 0: textoPorPantalla=textoPorPantalla+"El número de letras "+array[i]+" es cero. "; break;
}
}
System.out.println (textoPorPantalla);
System.out.print ("¿Desea analizar otra cadena? (S/N) ");
respuesta = entrada.nextLine();
}
}
public static int analizarVocal (String cadena, char vocalParaAnalizar) {
Stack<String> pila = new Stack<String>(); char v=vocalParaAnalizar; String vocal=String.valueOf(vocalParaAnalizar);
int i=0; int auxiliar=0;
while (i<cadena.length()) {
if (Character.toLowerCase(cadena.charAt(i))==v&&pila.empty()) {pila.push(vocal); auxiliar++;}
else if (Character.toLowerCase(cadena.charAt(i))==v&&!pila.empty()) {pila.pop();}
i++;
}
if (auxiliar==0) {return 0;} else { if (pila.empty()) {return 1;} else {return -1;}}
}
}
De nuevo, muchas gracias por tus revisiones. Son siempre muy acertadas.
¡Un saludo!