Wat betekent ArrayIndexOutOfBoundsException
en hoe kom ik er vanaf?
Hier is een code voorbeeld dat de exceptie triggert:
String[] name = { "tom", "dick", "harry" };
for (int i = 0; i <= name.length; i++) {
System.out.println(name[i]);
}
Uw eerste aanloophaven zou de documentatie moeten zijn, die het redelijk duidelijk uitlegt:
Wordt gegooid om aan te geven dat een array is benaderd met een illegale index. De index is ofwel negatief ofwel groter dan of gelijk aan de grootte van de array.
Dus bijvoorbeeld:
int[] array = new int[5];
int boom = array[10]; // Throws the exception
En hoe je het kunt vermijden... eh, doe dat niet't. Wees voorzichtig met je array indexen.
Een probleem waar mensen soms tegenaan lopen is denken dat arrays 1-geïndexeerd zijn, bijv.
int[] array = new int[5];
// ... populate the array here ...
for (int index = 1; index <= array.length; index++)
{
System.out.println(array[index]);
}
Dat zal het eerste element missen (index 0) en een exception gooien als index 5 is. De geldige indexen hier zijn 0-4 inclusief. Het correcte, idiomatische voor
statement hier zou zijn:
for (int index = 0; index < array.length; index++)
(Dat's in de veronderstelling dat je de index nodig hebt, natuurlijk. Als je in plaats daarvan de verbeterde for-lus kunt gebruiken, doe dat dan).
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];
}
Update: volgens uw code snippet,
for (int i = 0; i<=name.length; i++) {
De index is inclusief de lengte van de array's. Dit is buiten de grenzen. Je moet <=
vervangen door <
.
for (int i = 0; i < name.length; i++) {
Dit betekent dat u probeert een index van een array te benaderen die niet geldig is omdat hij niet tussen de grenzen ligt.
Dit zou bijvoorbeeld een primitieve integer array initialiseren met de bovengrens 4.
int intArray[] = new int[5];
Programmeurs tellen vanaf nul. Dus dit zou bijvoorbeeld een ArrayIndexOutOfBoundsException
opleveren omdat de bovengrens 4 is en niet 5.
intArray[5];