350 votes

Qu'est-ce qui provoque une exception java.lang.ArrayIndexOutOfBoundsException et comment puis-je l'éviter ?

Qu'est-ce que ArrayIndexOutOfBoundsException et comment s'en débarrasser ?

Voici un exemple de code qui déclenche l'exception :

String[] names = { "tom", "bob", "harry" };
for (int i = 0; i <= names.length; i++) {
    System.out.println(names[i]);
}

1 votes

En ce qui concerne la dernière question, un code serait utile. Accédez-vous au tableau avec un index connu, ou devez-vous commencer à déboguer pour comprendre comment l'index est calculé lorsque l'erreur se produit ?

49 votes

Remplacer i <= name.length con i < name.length - ou mieux, écrire une boucle for améliorée. ( for (String aName : name) { ... } )

2 votes

Cela signifie que vous voulez obtenir un élément du tableau qui n'existe pas, 'i<=name.length' signifie que vous voulez obtenir l'élément length+1 - qui n'existe pas.

1voto

Si vous utilisez la longueur d'un tableau pour contrôler l'itération d'un objet pour n'oubliez jamais que l'indice du premier élément d'un tableau est le suivant 0 . Ainsi, l'indice du dernier élément d'un tableau est inférieur d'une unité à la longueur du tableau.

0voto

ArrayIndexOutOfBoundsException Le nom lui-même explique que si vous essayez d'accéder à la valeur à l'index qui est hors de la portée de la taille du tableau, ce type d'exception se produit.

Dans votre cas, vous pouvez simplement supprimer le signe égal de votre boucle for.

for(int i = 0; i<name.length; i++)

La meilleure option est d'itérer un tableau :

for(String i : name )
      System.out.println(i);

0voto

GT_hash Points 81

Cette erreur se produit lorsque la boucle d'exécution dépasse les limites de temps,

class demo{
  public static void main(String a[]){

    int[] numberArray={4,8,2,3,89,5};

    int i;

    for(i=0;i<numberArray.length;i++){
        System.out.print(numberArray[i+1]+"  ");
    }
}

Tout d'abord, j'ai initialisé un tableau comme 'numberArray'. Ensuite, certains éléments du tableau sont imprimés en utilisant la boucle for. Lorsque la boucle s'exécute 'i' fois, l'élément 'numberArray[i+1]' est imprimé (lorsque la valeur i est 1, l'élément 'numberArray[i+1]' est imprimé ) Supposons que, lorsque i=(numberArray.length-2), le dernier élément du tableau est imprimé Lorsque la valeur 'i' atteint (numberArray.length-1), aucune valeur n'est imprimée A ce moment-là, 'ArrayIndexOutOfBoundsException' se produit J'espère que vous aurez une idée Merci !

0voto

Vous pouvez utiliser l'optionnel dans le style fonctionnel pour éviter NullPointerException y ArrayIndexOutOfBoundsException :

String[] array = new String[]{"aaa", null, "ccc"};
for (int i = 0; i < 4; i++) {
    String result = Optional.ofNullable(array.length > i ? array[i] : null)
            .map(x -> x.toUpperCase()) //some operation here
            .orElse("NO_DATA");
    System.out.println(result);
}

Sortie :

AAA
NO_DATA
CCC
NO_DATA

-1voto

Dans la plupart des langages de programmation, les index commencent à 0, il faut donc écrire i<noms.longueur o i<=names.length-1 au lieu de i<=names.length .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X