Čo spôsobuje výnimku java.lang.ArrayIndexOutOfBoundsException a ako jej zabrániť?

Čo znamená ArrayIndexOutOfBoundsException a ako sa jej zbaviť?

Tu je ukážka kódu, ktorá vyvolá výnimku:

String[] name = { "tom", "dick", "harry" };
for (int i = 0; i <= name.length; i++) {
    System.out.println(name[i]);
}
Riešenie

Ako prvé by ste sa mali obrátiť na [dokumentáciu][1], ktorá to vysvetľuje pomerne jasne:

Vyhodenie signalizuje, že k poľu bolo pristupované s nelegálnym indexom. Index je buď záporný alebo väčší alebo rovný veľkosti poľa.

Takže napríklad:

int[] array = new int[5];
int boom = array[10]; // Throws the exception

Pokiaľ ide o to, ako sa tomu vyhnúť... ehm, nerobte to. Dávajte si pozor na indexy polí.

Jedným z problémov, na ktorý ľudia niekedy narážajú, je myslenie si, že polia sú 1-indexované, napr.


int[] array = new int[5];
// ... populate the array here ...
for (int index = 1; index 
Komentáre (1)
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];
}

Pozri tiež:

  • [The Java Tutorials - Language Basics - Arrays][1]

Aktualizácia: podľa vášho úryvku kódu,


for (int i = 0; i
Komentáre (0)

Znamená to, že sa pokúšate získať prístup k indexu poľa, ktorý nie je platný, pretože sa nenachádza medzi hranicami.

Takto by sa napríklad inicializovalo primitívne celočíselné pole s hornou hranicou 4.

int intArray[] = new int[5];

Programátori počítajú od nuly. Takže toto by napríklad vyhodilo ArrayIndexOutOfBoundsException, pretože horná hranica je 4 a nie 5.

intArray[5];
Komentáre (2)