Hva betyr ArrayIndexOutOfBoundsException
og hvordan blir jeg kvitt den?
Her er et kodeeksempel som utløser unntaket:
String[] name = { "tom", "dick", "harry" };
for (int i = 0; i <= name.length; i++) {
System.out.println(name[i]);
}
Din første anløpshavn bør være dokumentasjonen som forklarer det rimelig tydelig:
Kastes for å indikere at en matrise har blitt aksessert med en ulovlig indeks. Indeksen er enten negativ eller større enn eller lik størrelsen på matrisen.
Så for eksempel
int[] array = new int[5];
int boom = array[10]; // Throws the exception
Når det gjelder hvordan du kan unngå det ... um, ikke gjør det. Vær forsiktig med matriseindeksene dine.
Et problem folk noen ganger støter på er å tro at matriser er 1-indeksert, f.eks.
int[] array = new int[5];
// ... populate the array here ...
for (int index = 1; index <= array.length; index++)
{
System.out.println(array[index]);
}
Det vil gå glipp av det første elementet (indeks 0) og kaste et unntak når indeksen er 5. De gyldige indeksene her er 0-4 inkludert. Den korrekte, idiomatiske for
-setningen her vil være:
for (int index = 0; index < array.length; index++)
(Det' er forutsatt at du trenger indeksen, selvfølgelig. Hvis du kan bruke den utvidede for-sløyfen i stedet, bør du gjøre det).
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];
}
Oppdatering: i henhold til kodebiten din,
for (int i = 0; i<=name.length; i++) {
Indeksen er inkludert matrisens lengde. Dette er utenfor grensene. Du må erstatte <=
med <
.
for (int i = 0; i < name.length; i++) {
Det betyr at du prøver å få tilgang til en indeks i en matrise som ikke er gyldig fordi den ikke ligger mellom grensene.
For eksempel vil dette initialisere et primitivt heltallsmatrise med den øvre grensen 4.
int intArray[] = new int[5];
Programmerere teller fra null. Så dette vil for eksempel kaste en ArrayIndexOutOfBoundsException
ettersom den øvre grensen er 4 og ikke 5.
intArray[5];