Progress28.ru

IT Новости


09ae9cb0
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Java lang arrayindexoutofboundsexception 5

Понимание Array IndexOutofbounds Исключение в Java

Java поддерживает создание и манипулирование массивами , как структуру данных. Индекс массива — это целочисленное значение, значение которого находится в интервале [0, n-1], где n — размер массива. Если сделан запрос на отрицательный или индекс, который больше или равен размеру массива, то JAVA выдает исключение ArrayIndexOutOfBounds. Это не похоже на C / C ++, где не выполняется проверка индекса привязки.

ArrayIndexOutOfBoundsException — исключение времени выполнения, выдаваемое только во время выполнения. Компилятор Java не проверяет эту ошибку во время компиляции программы.

// Индекс общей причины выходит за пределы

public class NewClass2

public static void main(String[] args)

for ( int i= 0 ; i

Ошибка выполнения выдает исключение:

Выход:

Здесь, если вы внимательно посмотрите, массив имеет размер 5. Следовательно, при доступе к его элементу с помощью цикла for максимальное значение индекса может быть 4, но в нашей программе оно увеличивается до 5 и, следовательно, является исключением.

Давайте посмотрим еще один пример использования arraylist:

// Еще один пример с индексом вне границ

public class NewClass2

public static void main(String[] args)

ArrayList lis = new ArrayList<>();

Ошибка выполнения здесь немного более информативна, чем предыдущая

Давайте поймем это немного подробнее

  • Индекс здесь определяет индекс, к которому мы пытаемся получить доступ.
  • Размер дает нам информацию о размере списка.
  • Поскольку размер равен 2, последний индекс, к которому мы можем получить доступ (2-1) = 1, и, следовательно, исключение

Правильный способ доступа к массиву:

Обработка исключения:

  • Использовать цикл for-each : он автоматически обрабатывает индексы при доступе к элементам массива. Пример-
  • Используйте Try-Catch: рассмотрите возможность включения вашего кода в оператор try-catch и соответственно обработайте исключение. Как уже упоминалось, Java не позволит вам получить доступ к недопустимому индексу и обязательно выдаст исключение ArrayIndexOutOfBoundsException. Однако мы должны быть осторожны внутри блока оператора catch, потому что, если мы не обработаем исключение надлежащим образом, мы можем скрыть его и, таким образом, создать ошибку в вашем приложении.

Эта статья предоставлена Rishabh Mahrsee . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Что вызывает исключение java.lang.ArrayIndexOutOfBoundsException и как его предотвратить?

239 Aaron [2011-04-05 18:54:00]

Что означает ArrayIndexOutOfBoundsException и как от него избавиться?

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

java arrays indexoutofboundsexception

23 ответа

245 Решение Jon Skeet [2011-04-05 18:57:00]

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

Подбрасывается, чтобы указать, что к массиву был обращен незаконный индекс. Индекс является либо отрицательным, либо большим или равным размеру массива.

Как избежать этого. um, не делайте этого. Будьте осторожны с индексами массива.

Одна проблема, с которой иногда сталкиваются люди, — это то, что массивы 1-индексируются, например.

Это пропустит первый элемент (индекс 0) и выдаст исключение, если индекс равен 5. Действительные индексы здесь 0-4 включительно. Правильный, идиоматический оператор for здесь:

(Предположим, что вам нужен индекс, конечно. Если вы можете использовать расширенный цикл for, сделайте это.)

45 BalusC [2011-04-05 18:59:00]

Смотрите также:

Обновление: согласно вашему фрагменту кода,

Индекс включает длину массива. Это за пределами. Вам нужно заменить на .

18 aioobe [2011-04-05 19:15:00]

В последней итерации

i буду равен name.length что является недопустимым индексом, так как индексы массива начинаются с нуля.

Ваш код должен читать

Это означает, что вы пытаетесь получить доступ к индексу массива, который недопустим, поскольку он не находится между границами.

Например, это инициализировало бы примитивный целочисленный массив с верхней границей 4.

Программисты подсчитываются с нуля. Таким образом, это, например, выбрало бы ArrayIndexOutOfBoundsException , поскольку верхняя граница равна 4, а не 5.

9 Tobb [2016-01-19 19:55:00]

Что вызывает ArrayIndexOutOfBoundsException ?

Если вы считаете, что переменная является «полем», где вы можете поместить значение, тогда массив представляет собой ряд ящиков, расположенных рядом с eachother, где число ящиков является конечным и явным целым числом.

Создание такого массива:

создает строку из 5 полей, каждая из которых имеет int . Каждый из ящиков имеет индекс, позицию в ряду ящиков. Этот индекс начинается с 0 и заканчивается на N-1, где N — размер массива (количество ящиков).

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

Который даст вам значение 4-го ящика в серии (поскольку первый ящик имеет индекс 0).

An ArrayIndexOutOfBoundsException вызван попыткой извлечь «ящик», который не существует, путем передачи индекса, который выше индекса последнего «поля» или отрицательного.

В моем примере выполнения эти фрагменты кода приведут к такому исключению:

Как избежать ArrayIndexOutOfBoundsException

Чтобы предотвратить ArrayIndexOutOfBoundsException , необходимо рассмотреть некоторые ключевые моменты:

Циклическое

При переходе по массиву всегда убедитесь, что индекс, который вы извлекаете, строго меньше длины массива (количество ящиков). Например:

Обратите внимание на , никогда не смешивайте = там.

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

Просто не надо. Придерживайтесь одного выше (если вам нужно использовать индекс), и это сэкономит вам много боли.

По возможности используйте foreach:

Таким образом вам не придется вообще обдумывать индексы.

При циклизации, что бы вы ни делали, НИКОГДА не изменяйте значение итератора цикла (здесь: i ). Единственное место, которое должно изменить значение, это сохранить цикл. Изменение в противном случае просто рискует исключением и в большинстве случаев не обязательно.

индексирование/обновление

При получении произвольного элемента массива всегда проверяйте, что он является допустимым индексом по отношению к длине массива:

Читать еще:  Java text simpledateformat

9 Makoto [2015-10-17 00:45:00]

Чтобы исключить исключение из строя индекса массива, следует использовать extended- for , где и когда они могут.

Основная мотивация (и использование) — это когда вы выполняете итерацию, и вам не требуются сложные шаги итерации. Вы не сможете использовать расширенный for для перемещения назад в массив или только для итерации по каждому другому элементу.

Гарантируется, что при выполнении этого не заканчивается выполнение элементов, и ваш [исправленный] пример легко конвертируется.

В вашем коде вы получили доступ к элементам из индекса 0 в длину массива строк. name.length дает количество строковых объектов в вашем массиве строковых объектов, т.е. 3, но вы можете получить доступ только до имени индекса 2 name[2] , поскольку к массиву можно получить доступ с индекса 0 до name.length — 1 где вы получаете name.length количество объектов.

Даже при использовании цикла for вы начинаете с нулевого индекса, и вы должны заканчивать name.length — 1 . В массиве a [n] вы можете получить доступ к форме a [0] к [n-1].

3 nIKHIL [2018-01-16 15:13:00]

Для данного массива длина массива равна 3 (т.е. Name.length = 3). Но поскольку он хранит элемент, начинающийся с индекса 0, он имеет максимальный индекс 2.

Вы получаете ArrayIndexOutOfBoundsException из-за i . name.length возвращает длину строки name , которое 3. Следовательно, при попытке получить доступ к name[3] , это незаконно и вызывает исключение.

public final length поля, которая содержит количество компонентов массива. length может быть положительной или нулевой.

2 Ion [2017-03-08 15:56:00]

То, как выглядит этот тип исключения при броске в Eclipse. Число в красном означает индекс, к которому вы пытались получить доступ. Таким образом, код будет выглядеть так:

Ошибка вызывается при попытке получить доступ к индексу, который не существует в этом массиве. Если массив имеет длину 3,

то единственными действительными индексами являются:

Если массив имеет длину 1,

то единственным действующим индексом является:

Любое целое число, равное длине массива, или больше, чем оно: вне пределов.

Любое целое число меньше 0: вне пределов;

PS: Если вы хотите лучше понять массивы и сделать некоторые практические упражнения, здесь есть видео: учебник по массивам в Java

Так много для этого простого вопроса, но я просто хотел выделить новую функцию на Java, которая позволит избежать всех путаниц в индексировании в массивах даже для новичков. Java-8 абстрагировала задачу итерации для вас.

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

ArrayIndexOutOfBounds означает, что вы пытаетесь проиндексировать позицию в массиве, который не выделен.

  • name.length равен 3, так как массив был определен с 3 объектами String.
  • При доступе к содержимому массива позиция начинается с 0. Так как есть 3 элемента, это будет означать name [0] = «tom», name [1] = «dick» и name [2] = «harry
  • Когда вы зацикливаетесь, так как я могу быть меньше или равен name.length, вы пытаетесь получить доступ к имени [3], которое недоступно.

Чтобы обойти это.

В вашем цикле for вы можете сделать я for(int я = 0; i

Используйте для каждого цикла

String[] name = < "tom", "dick", "harry" >; for(String n: name)

Используйте list.forEach(Consumer action) (требуется Java8)

String[] name = < "tom", "dick", "harry" >; Arrays.asList(name).forEach(System.out::println);

Конвертировать массив в поток — это хороший вариант, если вы хотите выполнить дополнительные «операции» с вашим массивом, например, фильтровать, преобразовывать текст, конвертировать в карту и т.д. (Требуется Java8)

String[] name = < "tom", "dick", "harry" >; — Arrays.asList(name).stream().forEach(System.out::println); — Stream.of(name).forEach(System.out::println);

Наиболее распространенный случай, который я видел для кажущихся таинственными ArrayIndexOutOfBoundsExceptions, то есть, по-видимому, не вызванных вашим собственным кодом обработки массива, является одновременным использованием SimpleDateFormat. В частности, в сервлете или контроллере:

Если два потока вступают в метод SimplateDateFormat.parse(), вы, скорее всего, увидите исключение ArrayIndexOutOfBoundsException. Обратите внимание на раздел синхронизации класса javadoc для SimpleDateFormat.

Удостоверьтесь, что в вашем коде нет места, которое будет обращаться к небезопасным классам потоков, таким как SimpleDateFormat, одновременно, как в сервлете или контроллере. Проверьте все переменные экземпляра ваших сервлетов и контроллеров для вероятных подозреваемых.

Для многомерных массивов может быть сложно получить доступ к свойству length правого измерения. Возьмем следующий код, например:

Каждое измерение имеет разную длину, поэтому тонкая ошибка заключается в том, что средняя и внутренняя циклы используют свойство length того же размера (поскольку length a[i].length той же a[j].length ).

Вместо этого для простоты внутренний цикл должен использовать a[i][j].length (или a[0][0].length ).

1 sgrpwr [2018-09-15 13:29:00]

ArrayIndexOutOfBoundsException, когда это исключение приходит, означает, что вы пытаетесь использовать индекс массива, который выходит за рамки или в условиях неработающего человека, которые вы запрашиваете больше, чем вы инициализировали.

Чтобы это предотвратить, всегда убедитесь, что вы не запрашиваете индекс, который отсутствует в массиве, т.е. Если длина массива равна 10, то ваш индекс должен находиться в диапазоне от 0 до 9

0 Mohit [2016-11-11 11:21:00]

Для любого массива длины n элементы массива будут иметь индекс от 0 до n-1.

Если ваша программа пытается получить доступ к любому элементу (или памяти) с индексом массива, большим, чем n-1, тогда Java будет вызывать ArrayIndexOutOfBoundsException

Итак, вот два решения, которые мы можем использовать в программе

Или какой-нибудь другой оператор цикла, например

Лучший способ пойти с a для каждого цикла, в этом методе программисту не нужно беспокоиться о количестве элементов в массиве.

0 adn.911 [2017-11-30 19:41:00]

ArrayIndexOutOfBoundsException означает, что вы пытаетесь получить доступ к индексу массива, который не существует или не связан с границей этого массива. Индексы массивов начинаются с и заканчиваются на длина — 1.

ArrayIndexOutOfBoundsException происходит, когда вы пытаетесь получить доступ индексированный элемент name.length, который не существует (индекс массива заканчивается на -1). просто заменяя Оригинал ответа (на английском)

Читать еще:  Разработка веб приложений javascript

Я вижу все ответы здесь, объясняющие, как работать с массивами и как избегать исключений индекса за пределами границ. Я лично избегаю массивов любой ценой. Я использую классы Collections, что исключает всю глупость необходимости полностью разбираться с индексами массивов. Циклические конструкции прекрасно работают с коллекциями, поддерживающими код, который легче писать, понимать и поддерживать.

0 ZiadM [2018-10-18 12:24:00]

Каждый элемент в массиве называется элементом, и каждый элемент получает доступ к его числовому индексу. Как показано на предыдущей иллюстрации, нумерация начинается с 0. Таким образом, к девятому элементу, например, следует обращаться по индексу 8.

IndexOutOfBoundsException выводится, чтобы указать, что индекс какого-либо типа (например, массив, строка или вектор) выходит за пределы диапазона.

К любому массиву X можно получить доступ с [0 до (X.length — 1)]

Согласно вашему Коду:

Если вы проверите System.out.print(name.length);

это означает, что длина вашего имени равна 3

ваш цикл работает от 0 до 3, который должен работать либо от «0 до 2», либо от «1 до 3»,

Ответ

Имя ArrayIndexOutOfBoundsException объясняет, что если вы пытаетесь получить доступ к значению в индексе, который выходит за пределы массива Array, возникает такое исключение.

В вашем случае вы можете просто удалить знак равенства из цикла for.

Лучшим вариантом является итерация массива:

-1 GT_hash [2018-07-17 06:03:00]

Эта ошибка возникает при переполнении циклов цикла. Давайте рассмотрим простой пример, например,

Сначала я инициализировал массив как «numberArray». то некоторые элементы массива печатаются с использованием цикла. Когда цикл запускает время «i», напечатайте элемент (numberArray [i + 1].. (когда значение я равно 1, будет напечатан элемент numberArray [i + 1].) Предположим, что, когда я = (numberArray. length-2), последний элемент массива печатается. Когда значение «i» переходит к (numberArray.length-1), нет значения для печати. В этот момент происходит «ArrayIndexOutOfBoundsException». Я надеюсь, что вы можете получить idea.thank вас!

-3 Kevin7 [2016-01-19 19:26:00]

Вы не могли перебирать или хранить больше данных, чем длина вашего массива. В этом случае вы можете сделать следующее:

Библиотека примеров приложений Java

Оглавление
Базовые типы

Замещающие типы
Без указателей
Массивы
Структурное программи-
рование

Обработка исключений
Возбуждение исключений
Классы обработки исключений
Блок finally
Строки String
Класс Math
Класс Vector
Класс Stack
Словарь на базе Hashtable
Словарь на базе Properties
Цифровые часы
Собственный класс
Наследование классов

Интерфейсы

1.6. Обработка исключений

В примере демонстрируются приемы обработки исключений нескольких типов, возникающих в приложениях Java.

Немного теории

Механизм исключений, предусмотренный в языке программирования Java, упрощает обработку ошибок. Вместо того чтобы проверять значение, возвращаемое функциями и методами, вы можете использовать для обнаружения и обработки ошибок структурные операторы, такие как try и catch.

Методы стандартных библиотек классов Java возбуждают исключения при возникновении ошибочных ситуаций. Заключив «ненадежный» с точки зрения возникновения ошибок код в блок try, вы можете перехватить и обработать исключения в блоке catch.

Заметим, что исключения возникают и в таких распространенных ситуациях, как выход за пределы массива или строки в процессе индексации, деление на нуль, попытка использования ссылки со значением null, недопустимое преобразование классов и так далее. С помощью исключений все подобные ошибки нетрудно обнаружить и обработать во время выполнения приложения.

Описание примера

В нашем примере мы покажем типичные ситуации, в которых возникают исключения.

Исключение ArrayIndexOutOfBoundsException

Это исключение возникает, когда программа пытается адресовать элементы за пределами массива.

В нашем примере мы используем исключение ArrayIndexOutOfBoundsException для завершения цикла обработки массива при достижении его границы:

Если не предусмотреть обработку исключения, программа завершится аварийно. Как только значение переменной i достигнет пяти, будет вызван системный обработчик исключений.

Наш обработчик, заданный в теле оператора catch, выводит название исключения на консоль, а затем прерывает выполнение цикла при помощи оператора break. Таким образом, программа продолжает свою работу «штатным» образом несмотря на предпринятую попытку выхода за границы массива.

Сообщение об исключении, отображенное приведенным выше фрагментом кода на консоли, выглядит следующим образом:

Исключение ArithmeticException

Ниже мы выполняем попытку деления числа 5 на нуль:

В результате такой попытки возникает исключение ArithmeticException и наша программа выводит на консоль соответствующее сообщение, показанное ниже:

Исключение ArrayStoreException

Если попытаться записать в ячейку массива ссылку на объект неправильного типа, возникнет исключение ArrayStoreException.

Ниже мы создаем массив класса Object, предназначенный для хранения строк класса String:

При попытке записать в первый элемент этого массива ссылку на объект класса Character возникает исключение:

Исключение ClassCastException

В языке программирования Java вы не можете выполнять явное преобразование типов произвольным образом. Если выполнить такое преобразование для классов, не связанных «узами» наследования, или другим недопустимым способом, возникнет исключение ClassCastException.

Ниже мы создаем ссылку на объект класса Character, а затем пытаемся выполнить преобразование этой ссылки к типу Byte:

В результате возникает исключение:

Исключение NegativeArraySizeException

Это исключение возникает при попытке создать массив отрицательного размера.

В приведенном ниже фрагменте кода мы создаем массив с размером -5:

При этом возникает исключение NegativeArraySizeException:

Исключение NullPointerException

Если попытаться использовать в программе ссылку, содержащую значение null, возникнет исключение NullPointerException.

Ниже мы создаем ссылку на массив nNulArray, записываем в нее значение null, а затем пытаемся определить размер массива, вызывая для этого метод length:

В результате возникает исключение:

Исключение StringIndexOutOfBoundsException

В Java есть методы, позволяющие работать с отдельными символами строк класса String. Например, метод charAt позволяет извлечь символ, расположенный в заданной позиции. Если указать позицию, лежащую за границей строки, возникнет исключение StringIndexOutOfBoundsException.

Ниже мы предпринимаем попытку извлечения десятого символа из строки, в которой имеется только три символа:

Читать еще:  Виртуальные функции java

При этом возникает исключение, а на экране появляется сообщение следующего вида:

Как исправить ошибку: java.lang.ArrayIndexOutOfBoundsException [duplicate]

Что означает ArrayIndexOutOfBoundsException и как я могу избавиться от него?

Вот пример кода, который запускает исключение:

14 ответов

Ваш первый порт вызова должен быть документацией , который объясняет это разумно ясно:

Брошено, чтобы указать, что к массиву был обращен незаконный индекс. Индекс является либо отрицательным, либо большим или равным размеру массива.

Как избежать этого. ., не делайте этого. Будьте осторожны с вашими индексами массива.

Одной из проблем, с которыми иногда сталкиваются люди, является то, что массивы 1-индексируются, например

Это пропустит первый элемент (индекс 0 ) и выдают исключение, когда индекс равен 5. Действующие индексы здесь 0-4 включительно. Правильный, идиоматический оператор for здесь будет:

(Предполагается, что вы нуждаетесь в индексе, конечно. Если вы можете использовать расширенный для цикла, сделайте это.)

Согласно вашему коду:

Если вы проверите System.out.print (name.length),

, что означает, что длина вашего имени равна 3

, ваш цикл работает от 0 до 3, который должен работать либо от «0 до 2», либо от «1 до 3»

ArrayIndexOutOfBoundsException означает, что вы пытаетесь получить доступ к индексу массива, который не существует или не связан с границей этого массива. Индексы массива начинаются с 0 и заканчиваются на длину — 1.

ArrayIndexOutOfBoundsException происходит, когда вы пытаетесь получить доступ к элементу index.length, который делает не существует (индекс массива заканчивается на -1). просто заменяя & lt; = с & lt; решит эту проблему.

См. также:

Обновление: в соответствии с вашим фрагментом кода,

Индекс содержит длину массива. Это за гранью. Вы должны заменить на .

Для многомерных массивов может быть сложно получить доступ к свойству length правого измерения. Возьмем следующий код, например:

Каждое измерение имеет разную длину, поэтому тонкая ошибка заключается в том, что средняя и внутренняя петли используют свойство length той же размерности (поскольку a[i].length (f5)).

Вместо этого внутренний цикл должен использовать a[i][j].length (или a[0][0].length для простоты).

Чтобы исключить исключительное исключение индекса массива, следует использовать инструкцию расширенный- for , где и когда они могут.

Основная мотивация (и использовать), когда вы выполняете итерацию, и вам не требуются сложные шаги итерации. Вы не могли бы использовать расширенный for для перемещения назад в массиве или только для итерации на каждом другом элементе.

Вы гарантированно не исчерпали элементы для повторения при этом, а ваш [исправленный] пример легко конвертируется.

Для вашего массива длина массива равна 3 (например, name.length = 3). Но поскольку он хранит элемент, начинающийся с индекса 0, он имеет максимальный индекс 2.

Итак, вместо ‘i ** & lt; = name.length’ вы должны написать ‘i & lt; ** name.length’ чтобы избежать «ArrayIndexOutOfBoundsException».

Это означает, что вы пытаетесь получить доступ к индексу массива, который недопустим, поскольку он не находится между границами.

Например, это инициализировало бы примитивный целочисленный массив с верхней границей 4 .

Программисты подсчитываются с нуля. Таким образом, это, например, выбрало бы ArrayIndexOutOfBoundsException , поскольку верхняя граница равна 4, а не 5.

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

Так много для этого простого вопроса, но я просто хотел выделить новую функцию на Java, которая позволит избежать всех путаниц в индексировании в массивах даже для новичков. Java-8 абстрагировал задачу итерации для вас.

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

ArrayIndexOutOfBoundsException само имя объясняет, что если вы пытаетесь получить доступ к значению в индексе, который выходит за рамки размера массива, возникает такое исключение.

В вашем случае вы можете просто удалить знак равенства из цикла for.

Лучшим вариантом является итерация массива:

В последней итерации

i будет равно name.length , что является незаконным индексом, так как индексы массива равны нулю, основанный.

Ваш код должен читать

Что вызывает ArrayIndexOutOfBoundsException ?

Если вы думаете о переменной как о «поле», где вы можете поместить значение, то массив представляет собой ряд ящиков, расположенных рядом с eachother, где число Ячейки представляют собой конечное и явное целое число.

Создание такого массива:

создает строку из 5 полей, каждая из которых имеет int . Каждый из ящиков имеет индекс, позицию в ряду ящиков. Этот индекс начинается с 0 и заканчивается на N-1, где N — размер массива (количество ящиков).

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

Который даст вам значение 4-го ящика в серии (так как в первом поле есть индекс 0).

ArrayIndexOutOfBoundsException вызвано попыткой извлечь «ящик», который не существует, передав индекс, который выше индекса последнего «поля» или отрицательный.

В моем примере работы эти фрагменты кода приведут к такому исключению:

Как избежать ArrayIndexOutOfBoundsException

Чтобы предотвратить ArrayIndexOutOfBoundsException , необходимо рассмотреть некоторые ключевые моменты:

При переходе по массиву всегда убедитесь, что индекс, который вы извлекаете, строго меньше длины массива (количество ящиков). Например:

Обратите внимание на , никогда не смешивайте там = .

Возможно, вам захочется сделать что-то вроде этого:

Просто нет. Придерживайтесь одного выше (если вам нужно использовать индекс), и это сэкономит вам много боли.

По возможности используйте foreach:

Таким образом, вы вообще не придется вообще обдумывать индексы.

Когда вы выполняете цикл, что бы вы ни делали, НИКОГДА не изменяйте значение итератора цикла (здесь: i ). Единственное место, которое должно изменить значение, это сохранить цикл. Изменение в противном случае просто рискует исключением и в большинстве случаев не является обязательным.

При извлечении произвольного элемента массива всегда проверяйте его действительность индекс по длине массива:

Ссылка на основную публикацию