Исключение Java ArrayIndexOutOfBounds - PullRequest
1 голос
/ 28 октября 2010

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

nextWord = MyArray[i + 1].toLowerCase();

Кто-нибудь может понять почему?

  String currentWord = "";
  String nextWord = "";

  for (int i = 0; i <= MyArray.length; i++) {

   // If not at the end of the array
   if (MyArray.length > 0 && i < MyArray.length) {

    currentWord = MyArray[i].toLowerCase();
    nextWord = MyArray[i + 1].toLowerCase(); /* EXCEPTION */

    System.out.println("CURRENT WORD: " + currentWord);
    System.out.println("NEXT WORD: " + nextWord);
   } 
  }

Спасибо!

Ответы [ 5 ]

4 голосов
/ 28 октября 2010

MyArray.length - 1 - последний элемент массива.Наибольшее значение i, которое уменьшится в if, равно MyArray.length - 1.И вы увеличиваете его на единицу в i + 1, поэтому вы получаете MyArray.length.Конечно, вы получите исключение:)

3 голосов
/ 28 октября 2010

Индексы массива работают от 0 до array.length - 1.

Типичная конструкция цикла для массивов такова:

for (int i=0; i<array.length; i++) // do stuff

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

for (int i=0; i<array.length-1; i++) // do stuff

, если вы выводите индекс за пределы цикла, после цикла он будет иметь правильное значениеназначить последний currentWord:

int i=0;
for (; i<array.length-1; i++) // do stuff
// here i == array.length - 1, provided you don't mess with i in the "do stuff" part
0 голосов
/ 28 октября 2010

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

for (int i = 0; i < MyArray.length; i++) {  
    currentWord = MyArray[i].toLowerCase();
    System.out.println("CURRENT WORD: " + currentWord);

    // If not at the end of the array  
    if (i != MyArray.length - 1) {  
       nextWord = MyArray[i + 1].toLowerCase();
       System.out.println("NEXT WORD: " + nextWord);
    }
}  
0 голосов
/ 28 октября 2010

Для массива MyArray допустимый индекс [0,MyArray.length-1]. Поскольку для данного i вы обращаетесь к элементу по индексу i+1, допустимое значение для i равно [0,MyArray.length-2].

Так что вы можете сделать:

for (int i = 0; i <= MyArray.length-2; i++) {

    // no need of the if check anymore.
    currentWord = MyArray[i].toLowerCase();
    nextWord = MyArray[i + 1].toLowerCase(); 
0 голосов
/ 28 октября 2010

Потому что, если i

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...