2011-06-10 5 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) 

Je comprends que mon tableau est hors des limites, mais qu'est-ce que leQue signifie cette erreur Java?

Index: 1365, Size: 1365

indiquerai?

Et comment pourrais-je résoudre ce problème? Juste augmenter la taille de mon tableau?

Répondre

9

-La taille est la taille du tableau (nombre d'éléments pouvant être conservés).

-L'index est l'emplacement auquel vous essayiez d'accéder.

NOTE 1: Depuis le premier indice est 0, vous où vous essayez d'accéder à 1+ l'Maximim du tableau si c'est la raison pour laquelle vous avez obtenu cette exception

FIX OPTION 1

Pour corriger cette exception dans le cas où vous utilisez une boucle pour manipuler les éléments que vous pourriez faire quelque chose comme ceci:

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

FIX OPTION 2

Comme vous l'avez dit, augmenter la taille serait une autre option. Vous avez juste besoin de faire quelque chose comme ceci:

MyArray[] ma = new MyArray[1366]; 

MAIS Ce ne serait pas très souple, au cas où vous voulez augmenter à l'avenir. Donc, une autre option pour éviter ce genre de choses serait d'utiliser une structure ou une collection de données un peu plus évoluée, comme une liste, car elles augmentent automatiquement lorsqu'elles sont nécessaires. Voir plus d'informations sur les structures de données ici: http://tutorials.jenkov.com/java-collections/index.html

Exemple 1 création:

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

Exemple 2 itération:

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

Merci d'avoir éclairci ce que la taille et l'index était, très utile. Juste ce dont j'avais besoin. –

+0

Votre bienvenue :) – sfrj

1

vous accédez à l'index # 1365, où vous avez seulement # 0- # 1364 dans ce tableau ...
augmenter la taille du tableau est une possibilité, mais je suppose que plus de code sera nécessaire pour une réponse exacte. (par exemple cela ne vous aidera pas si vous itérez alors que i < = array.length)

7

Les tableaux Java sont indexés de 0, donc si vous avez un tableau de taille 1365, les index valides sont 0, 1, 2, .. 1364. Vous avez probablement une erreur "off-by-one" dans votre code: au lieu d'itérer à < length, vous avez répété <= length, ou similaire.

3

Vous accédez à l'index 1365 dans un tableau de 1365 éléments. Il est hors limite car la plage autorisée est comprise entre 0 et 1364.

Accédez-vous à votre baie en boucle? Assurez-vous que la variable de compteur n'atteint pas la longueur du tableau.

1

Vous avez 1365 éléments dans votre tableau mais le premier élément est numéroté 0. Cela signifie que le dernier élément est numéroté 1364. Vous essayez d'obtenir l'élément 1365 qui n'existe pas. Assurez-vous que vous commencez votre comptage à 0.

2

Les tableaux sont généralement 0 indexés, ce qui signifie que le premier élément est à l'index 0. L'erreur que vous obtenez est parce que vous essayez d'obtenir l'élément à l'index 1365 (le 1366e element) dans un tableau qui ne peut contenir que 1365 éléments.

2

L'augmentation de la taille du tableau ne fixerai pas votre bug. Le problème est avec votre logique. La plupart probabl vous utilisez une boucle défectueuse, par exemple:

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

OU

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

Qu'est-ce que vous pourriez faire quelque chose comme:

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

for(int num:numbers) 
... 

En utilisant quelque chose comme la boucle au-dessus RIDs vous d'avoir à vous rappeler la longueur/indices.