Java Contar caracter distinto de una palabra

publicado por: Anonymous

Se como contar los caracteres de una palabra pero no sé como hacer que no se repita si ese carácter ya se contó

La salida que pretendo sacar seria de una entrada de “RATA”, una salida de
R 1, A 2, T 1.

public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        String cadena="";
        char [] Arraycadena ;
        char caracter;
        int contador =0;
        System.out.println("Introduce una palabra");
        cadena=Leer.dato();
        Arraycadena=cadena.toCharArray();
        for(int i =0;i<Arraycadena.length;i++){
            caracter = Arraycadena[i];
            for(int j=0;j<Arraycadena.length;j++){
                if(Arraycadena[j]==caracter){
                    contador++;
                }//Fin Si
            }//Fin Para
            System.out.println(Arraycadena[i]+" "+contador+" veces.");
            contador= 0;
        }//Fin Para

    }

}

solución

Si quieres contar cuantas veces aparece cada letra puedes mirar si esta ya existía y, si existía, sumarlo a un array donde guardes cuantas veces aparece. Por lo que tendrías un array de booleanos para ver si ya existe y otro de integers para ver la cantidad de veces que aparece.

Siguiendo tu código lo que buscas es algo así:

public static void main(String[] args) {
    String cadena="";
    char [] Arraycadena ;
    char caracter;
    System.out.println("Introduce una palabra");
    cadena=Leer.dato();
    Arraycadena=cadena.toCharArray();

    boolean[] yaEstaElCaracter = new boolean[Character.MAX_VALUE];
    int[] cuantasVeces = new int[Character.MAX_VALUE];

    for(int i =0;i<Arraycadena.length;i++){
        caracter = Arraycadena[i];            
        if(Arraycadena[i]==caracter){
            cuantasVeces[caracter]++;
        }
        yaEstaElCaracter[caracter] = true;
    }//Fin Para


    for(int i = 0; i < yaEstaElCaracter.length; i++){
        if(yaEstaElCaracter[i])
            System.out.println((char) i +" "+cuantasVeces[i]+" veces.");
    }

}

EDICION:

Para mostrarlos por orden se me ocurre una solucion menos elegante, y es que recorras el array hacia delante y vayas eliminando las letras que ya hayan aparecido e insertando un caracter que nunca debe aparecer (por ejemplo el espacio en blanco y así puede servirte también para contar caracteres de una frase).

Quedaria asi:

public static void main(String[] args) {
    String cadena="";
    char [] Arraycadena ;
    char caracter;
    System.out.println("Introduce una palabra");
    cadena=Leer.dato();
    Arraycadena=cadena.toCharArray();

    char[] caracteres = new char[cadena.length()];
    int[] cuantasVeces = new int[cadena.length()];

    for(int i =0;i<Arraycadena.length;i++){
        caracter = Arraycadena[i];   
        caracteres[i] = caracter;
        for(int j = i; j < Arraycadena.length; j++)   {                  
            if(Arraycadena[j]==caracter){
                cuantasVeces[i]++;
                Arraycadena[j] = ' ';
            }
        }    
        if(caracteres[i] != ' ')
            System.out.println(caracteres[i] +" "+cuantasVeces[i]+" veces.");
    }

}

Ejemplo de salida:

Entrada: 
    RATA
Salida:
    R 1 veces.
    A 2 veces.
    T 1 veces.

Ejemplo con una frase:

Entrada:
    TARTA DE RATA
Salida: 
    T 3 veces.
    A 4 veces.
    R 2 veces.
    D 1 veces.
    E 1 veces.
Respondido por: Anonymous

Leave a Reply

Your email address will not be published.