Что означает эта ошибка 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.