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

Desbordamiento de array

Estas en el tema de Desbordamiento de array en el foro de Java en Foros del Web. Buenas, seguro que para muchos esto es algo muy simple pero yo no lo entiendo. En teoría el siguiente código debería recorrer el Array y ...
  #1 (permalink)  
Antiguo 15/11/2009, 04:18
 
Fecha de Ingreso: noviembre-2007
Mensajes: 33
Antigüedad: 16 años, 5 meses
Puntos: 1
Desbordamiento de array

Buenas, seguro que para muchos esto es algo muy simple pero yo no lo
entiendo.

En teoría el siguiente código debería recorrer el Array y mostrarlo
sin problemas, pero da error:

Código:
       char letras [] = {'A',' ','v','e','r','.','.','.'};

       for ( int j : letras){
           System.out.print(letras[j]);
      }
Produce el siguiente error en la ejecución:

Código:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:
65
       at prueba.Main.main(Main.java:54)
Java Result: 1
¿Alguien sabe porque se desborda?

Gracias de antemano.
  #2 (permalink)  
Antiguo 15/11/2009, 12:05
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Desbordamiento de array

Hola,

Se produce un desbordamiento porque el valor de j no es un acumulador. El valor de j es automáticamente cada uno de los elementos del enumerable, en este caso el array letras. Es decir para cada ciclo, j no tiene un índice dentro del array, sino el elemento del array en esa posición. Por ejemplo,

Código:
char letras [] = {'A',' ','v','e','r','.','.','.','Ñ'};
for ( int j : letras){
	System.out.println(j);
}
En el ciclo la variable j toma el valor del primer elemento, por la conversión (cast) implicito que tienes al convertirlo en int, se convierte a integer y te dá el valor de la letra 'A' convertira a integer, o lo que es lo mismo ... su valor en la tabla Unicode UTF-8 (65), y así sucesivamente.


Si solamente quieres imprimir las letras, sin convertirlas a integer tendrías que evitar el cast, y en ese caso va a imprimir las letras una a una,

Código:
char letras [] = {'A',' ','v','e','r','.','.','.','Ñ'};
for (char j : letras){
	System.out.println(j);
}
Por cierto, no tienes que confundir la construcción for ( : ) con for ( ; ; ) que son dos cosas completamente diferentes. for (int j = 0; j < letras.length; j++), en este caso tienes el índice del array en j.

Saludos,
  #3 (permalink)  
Antiguo 19/11/2009, 01:58
 
Fecha de Ingreso: noviembre-2007
Mensajes: 33
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Desbordamiento de array

Hola HackmanC,

Ciertamente, es así como tú dices que funciona. Muchísimas gracias por tu aclaración.

Saludos,

JC.
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 06:35.