Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Histograma de frecuencias

hola, he visto algunos post sobre frecuencias, pero a mi encargaron con edades comprendidas entre 1 y 100 años, y por eso he implementado esto:

System.out.print("Ingresa el tamaño del vector de edades-> ");
Scanner leer = new Scanner(System.in);
int t = leer.nextInt();
Random edad = new Random();
System.out.println("Tamaño -> "+t);

int[] arreglo = new int[t];
for(int i=0; i<arreglo.length; i++)
arreglo[i]=1+edad.nextInt(100);

for(int i=0; i<arreglo.length; i++)
System.out.println(arreglo[i]);
System.out.println("\n --- Elementos Ordenados ---");

int a=0,b=0;
burbSort(arreglo,a,b);
for(int i=0; i<arreglo.length; i++)
System.out.println(arreglo[i]);

System.out.println("\n --- Frecuencias ---");

int frec[] = new int[100];
for ( int j = 1; j <= arreglo.length; j++ )
frec[arreglo[j]]++; //aqui se detiene la ejecucion del prog y lanza excepcion
for(int i = 0; i <= t; i++){ // este segmento pinta los asteriscos
System.out.println(frec[i]);
for ( int e = 1; e < arreglo[i]; e++ )
System.out.println("*");
}
pero, nunca cuenta las frecuencias, se detiene y esta es la salida que produce al llegar al for que cuenta de las frecuencias:

--- Frecuencias ---
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 28
at frec.main(frec.java:31)

la linea 31 es: frec[arreglo[j]]++;

que se supone tendria que sumar cada ocurrencia de edad en un arreglo entre 1 y 100, para despues de acuerdo a ese numero contado pintar un asterisco.
agradezco su respuesta de antemano.saludos.

agosto 28, 2012 | Registered Commenterdartheliber

hola dartheliber
la Excepción que te lanza es que estas intentando acceder a una posicion de vector que no existe
por ejemplo si tu vector frec es tamaño 100 y tu haces frec[100] te lanzara ese error porque el indice màs grande que acepta es 99 (porque en java en pieza el conteo desde 0 hasta tamaño-1).
el problema radica que los numeros almacenados arreglo no corresponde a una casilla del vector frec, una solucion es que hagas màs grande el vecto frec
para tu ejemplo ya que dices que es entre 1 y 100 años
lo que tienes que hacer es en esta parte

for ( int j = 1; j <= arreglo.length; j++ )
frec[arreglo[j]]++; //aqui se detiene la ejecucion del prog y lanza excepcion

HACER ESTO
frec[arreglo[j]-1]++;

ya que los vectores en java comienza en 0 y no en uno
tu edad 1 sera la casilla 0 .. y la 100 la casilla 99.

si tu no tienes ningun otro error ahi deberia funcionar

espero verte ayudado
atte Jhosep

agosto 28, 2012 | Registered Commenterjhosep