Maison >Java >javaDidacticiel >Index de tableau hors exception hors limites
Rencontrer le redoutable ArrayIndexOutOfBoundsException
? Ce guide explique sa cause et propose une solution pratique. Même si vous n'avez pas encore rencontré cette erreur, la comprendre vous évitera des problèmes de débogage sur toute la ligne.
Le ArrayIndexOutOfBoundsException
se produit lorsque votre code tente d'accéder à un élément du tableau à l'aide d'un index situé en dehors de la plage valide du tableau. En Java (et dans de nombreux autres langages), les indices de tableau commencent à 0 et s'étendent jusqu'à array.length - 1
. Essayer d'accéder à array.length
ou à un index négatif déclenchera cette exception.
Étude de cas : un programme de tri Java
Considérons un programme Java conçu pour lire des entiers à partir d'un fichier, les trier à l'aide du tri à bulles et afficher les résultats triés. Le code original, illustré ci-dessous, a produit un ArrayIndexOutOfBoundsException
.
<code class="language-java">public static void main(String[] args) { // ... (File input code using Scanner) ... int [] nums = new int [(int) name.length()]; // Problem starts here! // ... (File reading code) ... for (int i = 0; i < nums.length -1; i++) { for (int j = 0; j < nums.length - 1; j++) { // Potential issue here if(nums[i] > nums[j + 1]) { int temp = nums[j+1]; nums[j+1] = nums[i]; nums[i] = temp; } } } // ... (Output code) ... }</code>
La racine du problème
Le principal problème réside dans la boucle imbriquée dans le tri à bulles. La ligne if(nums[i] > nums[j 1])
pose problème. Lorsque j
atteint nums.length - 1
, j 1
devient nums.length
, un index invalide.
La solution : ajuster les limites des boucles
Le correctif implique de modifier la condition de la boucle interne pour empêcher j
d'atteindre le dernier index lorsque j 1
est utilisé. Au lieu de :
<code class="language-java">for (int j = 0; j < nums.length - 1; j++)</code>
Utilisation :
<code class="language-java">for (int j = 0; j < nums.length - 1; j++) </code>
Ce changement subtil garantit que le code évite d'accéder à nums[j 1]
lorsque j
est à sa valeur maximale valide (nums.length - 2
).
Autres considérations
Taille du tableau : La déclaration initiale du tableau int [] nums = new int [(int) name.length()];
est également potentiellement problématique. La longueur du nom de fichier n'a aucun rapport avec le nombre d'entiers contenus dans le fichier. Il est préférable de dimensionner dynamiquement le tableau en fonction du nombre réel d'entiers lus dans le fichier, ou d'utiliser une structure de données plus flexible comme ArrayList
.
Gestion des erreurs : Un code robuste inclut une gestion des erreurs (par exemple, try-catch
blocs) pour gérer les exceptions potentielles telles que FileNotFoundException
ou NumberFormatException
lors de la saisie d'un fichier.
En comprenant la cause et en appliquant la solution fournie, vous pouvez prévenir et résoudre efficacement ArrayIndexOutOfBoundsException
les erreurs dans vos programmes. N'oubliez pas de réfléchir attentivement au dimensionnement des tableaux et d'intégrer une gestion complète des erreurs pour un code robuste et fiable.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!