Τι προκαλεί την εξαίρεση java.lang.ArrayIndexOutOfBoundsException και πώς μπορώ να την αποτρέψω;

Τι σημαίνει ArrayIndexOutOfBoundsException και πώς μπορώ να το ξεφορτωθώ;

Ακολουθεί ένα δείγμα κώδικα που προκαλεί την εξαίρεση:

String[] name = { "tom", "dick", "harry" };
for (int i = 0; i <= name.length; i++) {
    System.out.println(name[i]);
}
Λύση

Η πρώτη σας επαφή θα πρέπει να είναι η [τεκμηρίωση][1] που εξηγεί με αρκετή σαφήνεια:

Εκτοξεύεται για να υποδείξει ότι ένας πίνακας έχει προσπελαστεί με παράνομο δείκτη. Ο δείκτης είναι είτε αρνητικός είτε μεγαλύτερος ή ίσος με το μέγεθος του πίνακα.

Έτσι, για παράδειγμα:

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

Όσο για το πώς να το αποφύγετε... μην το κάνετε αυτό. Να είστε προσεκτικοί με τους δείκτες του πίνακα σας.

Ένα πρόβλημα που αντιμετωπίζουν μερικές φορές οι άνθρωποι είναι να νομίζουν ότι οι πίνακες είναι 1-δείκτες, π.χ.


int[] array = new int[5];
// ... populate the array here ...
for (int index = 1; index 
Σχόλια (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];
}

See also:

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

Ενημέρωση: σύμφωνα με το απόσπασμα κώδικα σας,


for (int i = 0; i
Σχόλια (0)

Αυτό σημαίνει ότι προσπαθείτε να προσπελάσετε έναν δείκτη ενός πίνακα που δεν είναι έγκυρος, καθώς δεν βρίσκεται μεταξύ των ορίων.

Για παράδειγμα, αυτό θα αρχικοποιούσε έναν πρωτόγονο ακέραιο πίνακα με το άνω όριο 4.

int intArray[] = new int[5];

Οι προγραμματιστές μετρούν από το μηδέν. Έτσι αυτό για παράδειγμα θα έφερνε μια ArrayIndexOutOfBoundsException καθώς το άνω όριο είναι 4 και όχι 5.

intArray[5];
Σχόλια (2)