Программа должна находить в веденной строке наибольший палиндром. Проблема в том что при выполнении выходит ошибка "индекс выходит за границы длинны"

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 и гарантированно выпадаете за пределы массива, что и есть причина исключения.

→ Ссылка