Problème d'Indice ArrayIndexOutOfBoundsException JAVA

Fermé
Sarah - 7 oct. 2012 à 20:29
KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 7 oct. 2012 à 20:55
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 :)
A voir également:

1 réponse

KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
7 oct. 2012 à 20:42
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
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
KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
7 oct. 2012 à 20:55
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