Hola. De la lección CU00661B, envió aquí mi pequeño programa para contar vocales. A continuación van las dos clases "AparicionDeVocales" y "EntradaDeTeclado"
/**
 * Detalles de la clase.
 * Contador de la aparición de vocales en el texto introducido
 * @author (Toni)
 * @version (0)
 */
public class AparicionDeVocales {
    // Atributos de la clase AparicionDeVocales
    //Constructor para objetos de la clase AparicionDeVocales
    public AparicionDeVocales() {
        // Inicializa atributos
    } // Fin del constructor AparicionDeVocales
    // Siguen los setters para los atributos de la clase AparicionDeVocales
    // Ahora los getters para los atributos de la clase AparicionDeVocales
    // Y seguidamente, procedimientos y funciones varios.
    public static void main(String [] args) {
        int numA = 0;// contadores de caracteres
        int numE = 0;
        int numI = 0;
        int numO = 0;
        int numU = 0;
        int numResto = 0;
        int numCaracteres = 0;
        System.out.println ("Por favor, muéstrenos su frase.\n" +
            "Vamos a pedir a los duendecillos que vayan contando las vocales introducidas. Beep:");
        EntradaDeTeclado entrada1 = new EntradaDeTeclado();
        System.out.println ("Gracias por su colaboración.\n" +
            "Por favor. Déjenos unos millones de unidades de tiempo para realizar el trabajo.\n");
        String aCotejar = entrada1.getEntrada();
        numCaracteres = entrada1.getLongitud();
        String letra = ""; //letra la investigar
        for (int i = 0; i < numCaracteres; i++) {
            letra = aCotejar.substring(i,i+1).toUpperCase();
            if (letra.equals("A")) {
                numA ++;
            } else if (letra.equals("E")) {
                numE ++;
            } else if (letra.equals("I")) {
                numI ++;
            } else if (letra.equals("O")) {
                numO ++;
            } else if (letra.equals("U")) {
                numU ++;
            } else {
                numResto ++;
            }// fin del if
        } // fin del for
        System.out.println ("Bien. Ya hemos terminado.\n" +
            "Después de una árdua tarea, presentamos el resultado de nuestro trabajo.");
        System.out.println ("Se han introducido en total " + numCaracteres + " caracteres.");
        int sumaPorcentajes = 0;
        System.out.println ("Se ha usado " + numA + " veces la letra \"A\". Un " + numA * 100 / numCaracteres + "% del total.");
        sumaPorcentajes = numA * 100 / numCaracteres;
        System.out.println ("Se ha usado " + numE + " veces la letra \"E\". Un " + numE * 100 / numCaracteres + "% del total.");
        sumaPorcentajes += numE * 100 / numCaracteres;
        System.out.println ("Se ha usado " + numI + " veces la letra \"I\". Un " + numI * 100 / numCaracteres + "% del total.");
        sumaPorcentajes += numI * 100 / numCaracteres;
        System.out.println ("Se ha usado " + numO + " veces la letra \"O\". Un " + numO * 100 / numCaracteres + "% del total.");
        sumaPorcentajes += numO * 100 / numCaracteres;
        System.out.println ("Se ha usado " + numU + " veces la letra \"U\". Un " + numU * 100 / numCaracteres + "% del total.");
        sumaPorcentajes += numU * 100 / numCaracteres;
        System.out.println ("Añadiendo consonantes, espacios y demás, se han utilizado: " + numResto + " caracteres. " +
            "Un " + numResto * 100 / numCaracteres + "% del total.");
        sumaPorcentajes += numResto * 100 / numCaracteres;
        System.out.println ("\nLos duendecillos, además de sisarme el cambio. También se quedan con los decimales.\n" +
            "Los porcentajes, llegan hasta un " + sumaPorcentajes + "%. Pero ya me valen para mis estadísticas.\n\tFin del trabajo.");
    }// fin del main
} // Fin de la clase AparicionDeVocales
Me olvidé de la clase "EntradaDeTeclado"
La envío aquí.
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java
// Definimos una clase EntradaDeTeclado 
/**
 * Detalles de la clase.
 * 
 * @author (Toni) 
 * @version (0)
 */
public class EntradaDeTeclado {
    // Atributos de la clase EntradaDeTeclado
    private String entradaTeclado;
    /**
     * Constructor para objetos de la clase EntradaDeTeclado
     */
    public EntradaDeTeclado() {
        // Inicializa atributos
        entradaTeclado = "";
        pedirEntrada();
    } // Fin del constructor EntradaDeTeclado
    // Siguen los setters para los atributos de la clase EntradaDeTeclado
    // Ahora los getters para los atributos de la clase EntradaDeTeclado
    // Y seguidamente, procedimientos y funciones varios.
    public void pedirEntrada() {
        Scanner entradaEscaner = new Scanner(System.in);
        entradaTeclado = entradaEscaner.nextLine();
    }
    public String getEntrada() { return entradaTeclado; }
    public String getPrimeraPalabra() {
        for (int i = 0; i <entradaTeclado.length() -1 ; i++) {
            if (entradaTeclado.substring(i,i+1).equals(" ") ||
            entradaTeclado.substring(i,i+1).equals(",") ||
            entradaTeclado.substring(i,i+1).equals(";") ||
            entradaTeclado.substring(i,i+1).equals(".") ||
            entradaTeclado.substring(i,i+1).equals(":") ) {
                return entradaTeclado.substring(0,i);
            }//fin del if
        }//fin del for
        return entradaTeclado;//Caso de que no se detecte ningún espacio devolvemos lo que haya
    }// fin del método
    
    public int getLongitud() {
        return entradaTeclado.length();
    }// fin dle método
} // Fin de la clase EntradaDeTeclado
Saludos.
A mi, me funciona bien. Como veréis en mi código incluyo mensajes como si hablara con el usuario del programa. Eso lo hago a menudo, es mi manera de quitarle hierro a la respuesta cuadriculada de la computadora.
Dadme vuestra opinión.
Saludos
---------------