Que signifie "ArrayIndexOutOfBoundsException" et comment s'en débarrasser ?
Voici un exemple de code qui déclenche l'exception :
String[] name = { "tom", "dick", "harry" };
for (int i = 0; i <= name.length; i++) {
System.out.println(name[i]);
}
Votre premier port d'escale devrait être la [documentation][1] qui l'explique assez clairement :
Lancé pour indiquer qu'un tableau a été accédé avec un index illégal. L'index est soit négatif, soit supérieur ou égal à la taille du tableau.
Donc, par exemple :
int[] array = new int[5];
int boom = array[10]; // Throws the exception
Quant à savoir comment l'éviter... hum, ne faites pas ça. Faites attention aux index de vos tableaux.
Un problème que les gens rencontrent parfois est de penser que les tableaux sont indexés à 1, par exemple
int[] array = new int[5];
// ... populate the array here ...
for (int index = 1; index <= array.length; index++)
{
System.out.println(array[index]);
}
Le premier élément (index 0) ne sera pas pris en compte et une exception sera levée lorsque l'index sera 5. Les index valides ici sont de 0 à 4 inclus. L'instruction correcte et idiomatique pour
serait ici :
for (int index = 0; index < array.length; index++)
(En supposant que vous ayez besoin de l'indice, bien sûr. Si vous pouvez utiliser la boucle for améliorée à la place, faites-le).
[1] : http://download.oracle.com/javase/6/docs/api/java/lang/ArrayIndexOutOfBoundsException.html
if (index < 0 || index >= array.length) {
// Don't use this index. This is out of bounds (borders, limits, whatever).
} else {
// Yes, you can safely use this index. The index is present in the array.
Object element = array[index];
}
Mise à jour : selon votre extrait de code,
for (int i = 0; i<=name.length; i++) {
L'index inclut la longueur du tableau. Ceci est hors limites. Vous devez remplacer <=
par <
.
for (int i = 0; i < name.length; i++) {
[1] : http://download.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html
Cela signifie que vous essayez d'accéder à un index d'un tableau qui n'est pas valide car il n'est pas entre les limites.
Par exemple, cela initialiserait un tableau d'entiers primitifs avec la borne supérieure 4.
int intArray[] = new int[5];
Les programmeurs comptent à partir de zéro. Donc, par exemple, ceci lancerait une ArrayIndexOutOfBoundsException
car la limite supérieure est 4 et non 5.
intArray[5];