Ошибка исключения для массива символов

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

public static void main(String[] args)
{ String input; int len; input = JOptionPane.showInputDialog(null, "Please enter a string value: "); len = input.length(); char[] txt = new char[len]; for (int i = 0; i <= len; i++) { txt[i] = input.charAt(i); } for (int j = len; j >= 0; j--) { System.out.print(txt[j]); }
}

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

Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: 7 в program.main(program.java:28)

Он указывает на строку:

System.out.print(txt[j]);

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

3 ответа

замещать

for (int i = 0; i <= len; i++)

с

for (int i = 0; i < len; i++)

А также

for (int j = len; j >= 0; j--) {

с

for (int j = len-1; j >= 0; j--) {

Индексы массивов основаны на нулевом значении и заканчиваются на длину массива - 1.


Пожалуйста, измените условие цикла в вашем первом цикле!

i <= len

в

i < len

Он идет от 0... n-1

Также вам нужно изменить условие инициализации во втором цикле

int j = len

в

int j = len-1

Это от n-1... 0


Итерируйте по массиву от (length-1) до 0. Массив [length] приводит к исключению IndexOutOfBoundsException.

Пример кода:

for (int i = 0; i < len; i++){ txt[i] = input.charAt(i);
}
for (int j = len-1; j >= 0; j--){ System.out.print(txt[j]);
}

licensed under cc by-sa 3.0 with attribution.