[RESOLVIDO]Erro: Estourando o array (ArrayIndexOutOfBoundsException) ao verificar se string é palíndromo

Olá pessoal! Tudo bem??
Sou novo aqui no fórum e estou tentando melhorar meus conhecimentos em java. Estou fazendo um curso, muito bom por sinal, da Loiane Groner (https://loiane.training/), e numa das listas de exercícios sobre array, disponibilizadas por ela, começou a aparecer o seguinte erro:
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 3
at exerciciosArrayAula04.Ex07.main(Ex07.java:21)

Aparentemente, o array que eu criei está sendo estourado, mas eu não consegui identificar, de forma logica, o motivo deste erro acontecer. Segue foto do código.

Se alguém puder me explicar o que exatamente eu deixei passar, seria ótimo!
Obrigado pela atenção!

Os índices de um array começam em zero. Então se ele tiver, por exemplo, 10 elementos, os índices vão de 0 a 9.

Sendo assim, o problema está no for. Ele deve ir até vetor.length - 1, ou seja, na condição deveria ser i < vetor.length em vez de i <= vetor.length

Eu verifiquei isto também, mas o erro persiste :\

O problema é que quando i é igual a zero você tenta acessar o índice vetor.length - i, que será igual ao vetor.length (ou seja, é um índice inválido).

Mas na verdade não precisa desse contador contTrue, e nem de criar o array de char (dá para pegar os caracteres diretamente da string, com charAt).

E para verificar se a string é um palíndromo, você só precisa ir até a metade dela. Aí você vê se o primeiro caractere é igual ao último, depois se o segundo é igual ao penúltimo, etc. E se achar um diferente, nem precisa continuar a busca:

String numero = // ler o número
boolean palindromo = true;
for (int i = 0; i < numero.length() / 2; i++) {
    if (numero.charAt(i) != numero.charAt(numero.length() - 1 - i)) {
        // achei um diferente, nem adianta continuar
        palindromo = false;
        break; // interrompe o for
    }
}
if (palindromo) {
    // Número é palindromo
} else {
    // Número não é palindromo
}

Por fim, uma dica que vai te ajudar agora e no futuro: aprenda a fazer o teste de mesa e a debugar o código. Para programas pequenos como esse, não é tão complicado, e erros de lógica como esse podem ser facilmente detectados :slight_smile:

neste caso, ao ser inserido um número ímpar, sua metade seria quebrada, isso pode resultar em mais erros não? eu logo pensei nisso, por isso nem tentei fazer desta forma que voce mencionou

Não. Se a quantidade de dígitos for ímpar, eu não preciso verificar o dígito do meio.

Por exemplo, se a string for “12321”, eu não preciso verificar o “3” para saber se é palíndromo.

Vale lembrar que a divisão de dois números inteiros sempre é arredondada e o resultado é um int, não há problema de ter valores quebrados.

Acredito que o problema está na forma como vc está criando seu array.

Vc pede pro usuario digitar um número e ao invés de criar um array usando este número, vc cria um array usando o length da string. Ou seja, se o usuario digita o número 3, vc não cria uma array com 3 elementos, vc cria com apenas 1 que é o length da string “3”.

Tenta algo assim:

int n = Integer.parseInt(JOptionPane.showInputDialog("Insira um número"));
char[] vetor = new char[n];

EDIT: Percebi que o que citei como erro, na verdade faz parte do algoritmo. Apenas me ignorem, por favor.

Fez sentido hugo! Eu vou resolver o código e aderir às suas dicas! Muito obrigado!!