0 votos
Buenas, soy novato en todo el tema de la programación y apenas hemos comenzado a usar Java, estoy terminando el primer cuatrimestre, y nos han mandado una práctica final bastante engorrosa para los que llevamos poco tiempo en el lío.

La cosa es que voy por el apartado donde me piden realizar una cuenta de todas las veces que aparece cada carácter en un fichero de texto. Posteriormente tengo que imprimir únicamente la que se repita más veces(en caso de empate da igual cuál imprima), dicho esto último, no puedo imprimir únicamente una variable tras realizar un conteo, si no que tengo que ir guardando de alguna manera cada conteo de cada carácter.

Mi esquema cerebral es bastante sencillo, utilizar arrays para ir guardando la información respectiva a cada carácter, pero a la hora de implementarlo en java, no me funcionan los ciclos for, o no se como realizar el conteo que toca, se me quedan en bucles infinitos...

Gracias de antemano, espero aprender mucho en lo que dure mi estancia aquí!
preguntado por Noyalkrad Ene 24, 2015 en Java

1 Respuesta

0 votos
Mejor respuesta

Hola. Ante todo te voy a dar una ayuda, no una solución final, pues nos comprometemos con el aprendizaje, y realizar esta clase de ejercicios es vital para tal.

Bueno tienes la opción de los arrays de la A a la Z si sabes que no hay más caracteres que esos, donde vas a ir guardando un contador para cada letra (también puedes curarte en salud y hacer un Array con todos los caracteres Unicode, para otros caracteres como puntos, arrobas, guiones, etc).

Por el problema, te recomendaría mejor utilizar HashMap (http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html), además de ser mucho más potente que un Array (y te puedo asegurar que al programar con Java, los List y HashMap se utilizan mucho más que los Arrays por todas las ventajas que ofrecen). La idea es que el programa aprenda si el carácter existe o no (sin tener que inicializar, como se hace en el Array. De esta manera te puede llegar cualquier carácter, exista o no), y si existe cuente más uno por cada coincidencia. La particularidad de los HashMap es que guardan una clave única y un valor. Si la clave única es un carácter y el valor es un número del contador, cada vez que leas un carácter preguntarás al HashMap ¿Tienes este carácter de clave? y si lo tiene sumarás uno a su valor, y si no lo tiene crearás la clave con el carácter y el valor iniciado en uno. Como supongo que no lo habrás dado el HashMap, te pongo un ejemplo rápido:

//Donde en <String, Integer> equivale a <Clave, Valor>
HashMap<String, Integer> mapa = new HashMap<String, Integer>();

//Para guardar un carácter
mapa.put("a", 1);

//Para preguntar si contiene la clave. Devuelve true si la contiene
boolean existeCaracter = mapa.containsKey("a");

//Para obtener el contador de un carácter
int contador = mapa.get("a");

//Aplicas mapa.put("a", contador+1). Al ya existir la clave, se sobrescribe el valor

Evidentemente falta toda la lógica de ciclos. Esto ya es trabajo tuyo :)

respondido por Ramon [Admin] Ene 24, 2015
seleccionada por Noyalkrad Ene 25, 2015