Member 13684187 Ответов: 2

Исключение индекса массива за пределами границ?


Предполагается, что этот код возвращает длину самой длинной строки в массиве. Я не знаю, как заставить его сделать это или исправить эту ошибку. Я не понимаю рабочих частей этого метода. Есть какие-нибудь предложения/помощь? Заранее спасибо.


   public static double longest(String[] A) {
     int max = 0;		
       for (int i=0; i<A.length; i++) {
            if (A[i].length() < A[i++].length()) {
                max = A[i].length();
	    }
            else
                max = A[i++].length();			
        }
        return max;
    }

    public static void main(String[] args) {
			String[] S2 = {"H", "Hi", "Hey", "Hey!"};
        System.out.println(longest(S2));
  }
}

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
        at fixMyCode.longest(fixMyCode.java:8)
        at fixMyCode.main(fixMyCode.java:15)


Что я уже пробовал:

Я пробовал возиться с самим заявлением for, но я не знаю, что я делаю.

Maciej Los

Когда i (счетчик) равен A.length-1 эта линия: A[i++].length() вызывать ошибку.

2 Ответов

Рейтинг:
2

Patrice T

Цитата:
Исключение индекса массива за пределами границ?

Идентификатор сообщения об ошибке, потому что i++ изменяет значение i, и вы заканчиваете работу после окончания массива.
Цитата:
Предполагается, что этот код возвращает длину самой длинной строки в массиве.

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


Рейтинг:
17

phil.o

Попробуй

for (int i = 0; i < A.length - 1; i++) {
   if (A[i].length() < A[i + 1].length()) {
      max = A[i].length();
   }
   else
      max = A[i + 1].length();			
}

i++ это не то же самое, что i + 1.
i++ изменяет i переменная, тогда как i + 1 просто вычисляет приращение, но оставляет переменную нетронутой.
Таким образом, ваша проблема заключается в том, что вы взаимодействуете с переменной цикла внутри цикла. В какой-то момент, учитывая эти неожиданные приращения, индексная переменная выходит из области видимости, что приводит к получению сообщения об ошибке.
Обратите внимание, что, поскольку вы используете i + 1 в цикле вы должны повторять не до последнего элемента, а до предпоследнего, чтобы индексация никогда не выходила за пределы области видимости.