Что означает эта ошибка Java?

java.lang.IndexOutOfBoundsException: Index: 1365, Size: 1365
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at com.Engine.write(Engine.java:114)
at com.Engine.read(Engine.java:90)
at com.Engine.main(Engine.java:19)

Я понимаю, что мой массив выходит за рамки, но что делает

Index: 1365, Size: 1365

указать?

и как я могу это исправить? Просто увеличить размер моего массива?

7 ответов


-Size-размер массива(количество элементов, которые могут содержать).

-Index-это местоположение, к которому вы пытались получить доступ.

Примечание 1: поскольку первый индекс равен 0, вы пытаетесь получить доступ к 1+ максимуму массива, поэтому вы получили это исключение

ИСПРАВИТЬ ВАРИАНТ 1

чтобы исправить это исключение в случае, если вы используете цикл для управления элементами, вы можете сделать что-то вроде это:

for(int i = 0; i < array.length; i++) {
   array[i].doSomething();
}

ИСПРАВИТЬ ВАРИАНТ 2

как вы сказали, увеличение размера будет другой вариант. Вам просто нужно сделать что-то вроде этого:

MyArray[] ma =  new MyArray[1366];

но Это было бы не очень гибко, если вы хотите увеличить его снова в будущем. Таким образом, другой вариант избежать чего-то подобного-использовать немного более продвинутую структуру данных или коллекцию, например список, потому что они автоматически увеличиваются при необходимый. Смотрите дополнительную информацию о структурах данных здесь:http://tutorials.jenkov.com/java-collections/index.html

Пример 1 Создание:

List<MyObject> myObjects =  new ArrayList<MyObject>();

Пример 2 итерации:

 for(MyObject mo : myObjects) {
     MyObject tmpValue = mo;
    mo.doSomething();  
   }

массивы Java 0-индексируются, поэтому, если у вас есть массив размера 1365, допустимыми индексами являются 0, 1, 2,... 1364. Вероятно, у вас есть ошибка off-by-one в вашем коде: вместо итерации в < length, вы повторяли до <= length, или похожие.


вы получаете доступ к индексу 1365 в массиве элементов 1365. Это запрещено, потому что разрешенный диапазон от 0 до 1364.

вы получаете доступ к массиву в цикле? Убедитесь, что переменная counter не достигает длины массива.


массивы обычно 0 индексируются, что означает, что первый элемент имеет индекс 0. Ошибка, которую вы получаете, заключается в том, что вы пытаетесь получить элемент с индексом 1365 (1366-й элемент) в массиве, который может содержать только 1365 элементов.


увеличение размера массива не исправит вашу ошибку. Проблема в вашей логике. Большинство probabl вы используете дефектный цикл, например:

int max=1365;
for(int i=1; i<=max; ++i)
...

или

int max=1365;
for(int i=0; i<=max; ++i)
...

то, что вы могли бы сделать, это что-то вроде:

int[] numbers = {1,2,3,4,5,6,7,8,9,10};

for(int num:numbers)
...

использование чего-то вроде цикла for выше избавляет вас от необходимости запоминать длину/индексы.


вы получаете доступ к индексу #1365, где у вас есть только #0-#1364 в этом массиве...
увеличение размера массива возможно, но я думаю, что для точного ответа потребуется больше кода. (например, это не поможет, если вы будете повторять, пока I


У вас есть 1365 элементов в вашем массиве, но первый элемент имеет номер 0. Это означает, что последний элемент имеет номер 1364. Вы пытаетесь получить элемент 1365, который не существует. Убедитесь, что вы начинаете отсчет с 0.