Программа должна находить в веденной строке наибольший палиндром. Проблема в том что при выполнении выходит ошибка "индекс выходит за границы длинны"
import java.util.Scanner;
public class Laba1_11 {
private static void explorerPalindrome(String str) {
char []string= str.toCharArray();
int l=0, r=0;
for (int i=1; i < string.length; i++){
int j=1;
while (string[i-j] == string[i+j] && i-j>=0 && i+j< string.length) {
if (2*j>r-l){
l = i - j+1;
r = i + j;
}
j++;
}
j=1;
while (string[i-j] == string[i+j-1] && i-j>=0 && i+j< string.length){
if (2*j-1>r-l){
l = i - j+1;
r = i + j;
}
j++;
}
}
System.out.print("\nPalindrome starting position "+l+" final palindrome position "+r);
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.print("Enter a string: ");
String str= sc.nextLine();
explorerPalindrome(str);
}
}
Как исправить это я просто не понимаю почему индекс выходит за границы, и в какой части кода ошибка
Ответы (1 шт):
Проблема здесь: string[i + j] в первом цикле while. данный цикл выполняется внутри цикла for, где происходит перебор элементов массива string (всех элементов!) и для этого заводится переменная i. кроме того, у вас есть переменная j, которая изначально равна 1 и ни при каких условиях не уменьшается. посему на последней итерации цикла for переменная i должна соответствовать последнему элементу данного массива, то есть равна длинна массива минус 1. в этот момент мы прибавляете к ней значение переменной j и гарантированно выпадаете за пределы массива, что и есть причина исключения.