Alguem sabe o que pode estar gerando isso no meu codigo? java.lang.StackOverflowError

Ola galera, sou iniciante em programação e não sei o que pode estar gerando a exceção java.lang.StackOverflowError no meu codigo. Me ajudem por favor, irei colocar o metodo que esta gerando isso no codigo abaixo.

public static Boolean isPalindromo(String original, int i, int j){
        
        boolean resp = true;

        if(j >= i){
            if(original.charAt(i) != original.charAt(j)){
                resp = false;
            }
            else{
                resp = isPalindromo(original, i++, j--);
            }
        }

        return resp;
    }

eu tenho que verificar nessa questão se a string é um palindromo de forma recursiva.

Ele tava entrando num loop infinito, por isso o erro.

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html


public static Boolean isPalindromo(String original, int i, int j) {
    boolean resp = true;

    if (j >= i) {
        if (original.charAt(i) != original.charAt(j)) {
            resp = false;
        } else {
            i++;
            j--;

            resp = isPalindromo(original, i, j);
        }
    }

    return resp;
}

ou

public static Boolean isPalindromo(String original, int i, int j) {
    boolean resp = true;

    if (j >= i) {
        if (original.charAt(i) != original.charAt(j)) {
            resp = false;
        } else {
            resp = isPalindromo(original, i + 1, j - 1);
        }
    }

    return resp;
}

É importante perceber a diferença entre i++ e ++i

No teu caso, i++ e j-- passam para o método o valor de i e j e em seguida incrementam ou decrementam o valor. Ou seja, estás sempre a invocar o método isPalindromo com os mesmos parâmetros.

Se trocares para resp = isPalindromo(original, ++i, --j); então o valor será alterado antes da invocação e terás o comportamento que pretendes.

Para evitar estes erros, e como não estás em nenhum loop e não vais utilizar o valor de i e j novamente, podes simplesmente fazer resp = isPalindromo(original, i+1, j-1);

2 curtidas

Muito obrigado amigo, entendi o meu erro com sua explicação, ajudou demais !!

Valeu irmao, consegui resolver o erro!