2011-06-10 23 views
9
java.lang.IndexOutOfBoundsException: Index: 1365, Size: 1365 
at java.util.ArrayList.rangeCheck(Unknown Source) 
at java.util.ArrayList.get(Unknown Source) 
at com.Engine.write(Engine.java:114) 
at com.Engine.read(Engine.java:90) 
at com.Engine.main(Engine.java:19) 

entiendo que mi matriz está fuera de límites, pero lo que lo hace el¿Qué significa este error de Java?

Index: 1365, Size: 1365

indico?

¿Y cómo podría ir arreglando esto? ¿Solo aumentar el tamaño de mi matriz?

Respuesta

9

-El tamaño es el tamaño de la matriz (Cantidad de elementos que pueden contener).

-Index es la ubicación a la que intentaba acceder.

NOTA 1: Desde el primer índice es 0, donde intentar acceder 1+ el maximo de la matriz por eso es que tienes esa excepción

FIX OPCIÓN 1

Para solucionar este problema excepción en el caso de que utilice un bucle para manipular los elementos que podría hacer algo como esto: OPCIÓN

for(int i = 0; i < array.length; i++) { 
    array[i].doSomething(); 
} 

FIX 2

Como dijiste, aumentar el tamaño sería otra opción. Sólo tiene que hacer algo como esto:

MyArray[] ma = new MyArray[1366]; 

PERO Eso sería poco flexible, en caso de que desee aumentar de nuevo en el futuro. Entonces, otra opción para evitar algo como esto sería usar una estructura o colección de datos un poco más avanzada, como una Lista, porque automáticamente aumentan cuando es necesario. Ver más información sobre estructuras de datos aquí: http://tutorials.jenkov.com/java-collections/index.html

Ejemplo 1 la creación:

List<MyObject> myObjects = new ArrayList<MyObject>(); 

Ejemplo 2 de iteración:

for(MyObject mo : myObjects) { 
    MyObject tmpValue = mo; 
    mo.doSomething(); 
    } 
+0

Gracias por aclarar qué tamaño e índice era, muy útil. Justo lo que necesitaba. –

+0

Su bienvenida :) – sfrj

1

accede al índice # 1365, donde solo tiene # 0- # 1364 en este conjunto ...
aumentando el tamaño del conjunto es una posibilidad, pero creo que se necesitará más código para obtener una respuesta exacta. (por ejemplo, no será de ayuda si iteras mientras que yo < = array.length)

7

Las matrices de Java tienen 0 índices, por lo que si tienes una matriz de tamaño de 1365 índices válidos son 0, 1, 2, ... 1364. Probablemente tengas un error de uno a uno en tu código: en lugar de iterar a < length, iteraste a <= length, o similar.

3

Está accediendo al índice 1365 en una matriz de 1365 elementos. Está fuera de límites porque el rango permitido es de 0 a 1364.

¿Está accediendo a su matriz en un bucle? Asegúrese de que la variable del contador no alcance la longitud de la matriz.

1

Tiene 1365 elementos en su matriz pero el primer elemento está numerado 0. Esto significa que el último elemento está numerado 1364. Está intentando obtener el elemento 1365 que no existe. Asegúrese de que está comenzando su conteo desde 0.

2

Las matrices generalmente están indexadas, lo que significa que el primer elemento está en el índice 0. El error que está obteniendo es porque está tratando de obtener el elemento en el índice 1365 (el 1366º elemento) en una matriz que puede contener solo 1365 elementos.

2

Aumentar el tamaño de la matriz no va a reparar su error. El problema es con tu lógica. La mayoría probabl está utilizando un bucle defectuoso, por ejemplo:

int max=1365; 
for(int i=1; i<=max; ++i) 
... 

O

int max=1365; 
for(int i=0; i<=max; ++i) 
... 

Lo que podría hacer es algo como:

int[] numbers = {1,2,3,4,5,6,7,8,9,10}; 

for(int num:numbers) 
... 

usar algo como el bucle por encima de los RID usted de tener que recordar la longitud/índices.

Cuestiones relacionadas