Problème d'Indice ArrayIndexOutOfBoundsException JAVA

Sarah -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,

J'ai cet erreur quand je compile mon code :

for (int i = tabTri.length; i>=0; i--)
{
if (insert<tabTri[i] && insert>tabTri[i-1])
{
tabTri[i] = insert;
tabTri[i+1] = tabTri[i];
}
}

J'aimerais insérer un élément dans un tableau int déjà trié en parcourant par la fin.

Merci :)

1 réponse

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    ArrayIndexOutOfBoundsException ce n'est pas une erreur que tu as à la compilation mais à l'exécution !

    Les cases d'un tableau de taille n vont de 0 à n-1, cette exception indique que tu essayes d'accéder à une case qui n'existe pas. Remarque : l'exception doit indiquer quelle est la valeur de la case à laquelle tu essayes d'accéder.

    Tu utilises tabTri[i], or avec ta boucle for tu initalises i avec la valeur tabTri.length, il faudrait que tu commences par l'indice tabTri.length-1

    Par ailleurs, tu utilises tabTri[i-1], ce qui va là encore poser problème mais cette fois pour la valeur i=0 puisque tu vas chercher la case "-1" qui n'existe pas, il faut donc t'arrêter à la valeur 1.

    Tu devrais donc avoir : for (int i=tabTri.length-1 ; i>=1; i--)

    Remarque : en faisant tabTri[i] = insert; puis tabTri[i+1] = tabTri[i]; tu vas affecter la valeur "insert" sur les deux cases, le programme ne feras donc pas ce que tu veux.
    0
    1. Sarah
       
      Coucou,

      Merci beaucoup ! Ca a effectivement éxécuté mais du coup je compare pas l'élement d'insertion à l'indice 0 de mon tableau ?

      :)
      0
    2. KX Messages postés 19031 Statut Modérateur 3 020
       
      Vu ton test if (insert<tabTri[i] && insert>tabTri[i-1]) avec l'indice 0, tu regardes la case 0 à gauche, mais aussi la case -1 à droite, donc tu vas te retrouver avec un autre ArrayIndexOutOfBoundsException.
      Il faut donc revoir ton algorithme en fonction de tes besoins pour toujours utiliser des indices valides.
      0