Foros del Web » Programación para mayores de 30 ;) » Java »

Construcción programa java.

Estas en el tema de Construcción programa java. en el foro de Java en Foros del Web. Buenos tardes a todos, Estoy intentando realizar un pequeño ejemplo (el cual no soy capaz de abordar ya que me parece que tiene un enunciado ...
  #1 (permalink)  
Antiguo 05/05/2014, 04:41
 
Fecha de Ingreso: mayo-2014
Ubicación: Albacete
Mensajes: 4
Antigüedad: 10 años, 8 meses
Puntos: 0
Pregunta Construcción programa java.

Buenos tardes a todos,

Estoy intentando realizar un pequeño ejemplo (el cual no soy capaz de abordar ya que me parece que tiene un enunciado un poco lioso) en el, se me pide un programa que tomando varias palabras (cien como máximo) todas ellas en minúsculas (separadas entre sí por espacios), devuelva un histograma (por cada una de las palabras) dando la frecuencia de aparición de cada letra, así como un histograma final para todas las palabras.

Por lo que he estado googleando, en este caso particular, el histograma tendrá que verse en orden alfabético siguiendo unas condiciones determinadas: una línea completa por cada letra del alfabeto español (27 letras) que aparezca en la palabra, comenzando cada línea por la letra seguida de ":" y a continuación, un espacio. Después de eso, tantos asteriscos (*) o cualquier otro carácter (eso da igual) como la frecuencia de aparición de la letra en la palabra. [Si la frecuencia de una de las palabras es cero, sobreentiendo que no debe aparecer su línea en el histograma] Cada histograma (el de cada palabra) debe estar separado con una línea en blanco, exceptuando el último. El histograma final debe mostrar la frecuencia de las letras en todas las palabras de entrada.

Ejemplo:
Entrada:
hola hellow
Salida:
//(Histograma 1ªpalabra)
a: *
h: *
l: *
o: *

//(Histograma 2ªpalabra)
e: *
h: *
l: **
o: *
w: *

//(Histograma final)
a: *
e: *
h: **
l: ***
o: **
w: *


No pido que se realice totalmente el programa ya que sería muy egoísta por mi parte, si no una pequeña guía de cómo puedo llevar a cabo este ejemplo.

Gracias de antemano
  #2 (permalink)  
Antiguo 05/05/2014, 07:48
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 8 meses
Puntos: 306
Respuesta: Construcción programa java.

Primero necesitas un bucle con la clase Scanner para ir capturando las palabras, hasta que llegues a un número determinado o escribas una palabra que indique salida.

También necesitas Map global (se podría hacer con un array pero es más incómodo) usando las letras como key, y el número de veces que aparece como value.

Necesitas un método DescomponerPalabra al que le pases una palabra, recorra sus caracteres y los vaya añadiendo/sumando en un Map que acabas de crear dentro de ese método. Además debería llamar al método de pintarHistograma de la palabra y sumar sus valores al global (este podría ser otro método).

Un método pintarHistograma que recorra el Map pintando la letra y cantidad tal como te indican. El mismo método te serviría para el Map por palabra y el global.

Al salir del bucle que recupera las palabras metidas por consola, debes llamar al pintarHistograma pasándole el Map global.

Edito: Si le psas las cien palabras separadas por espacio no necesitas el bucle de Scanner, sólo hacer un split de la cadena usando como separador el espacio en blanco. Entonces tendrás un array con 100 palabras y tendrás que recorrer ese array llamando al DescomponerPalabra.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 10/05/2014, 08:41
 
Fecha de Ingreso: mayo-2014
Ubicación: Albacete
Mensajes: 4
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Construcción programa java.

Muchas gracias, me ha servido de gran ayuda.

Etiquetas: programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:13.