Programa de verificação de palavras palindromas

2 respostas
luckyboy

Boas pessoal, sou novo aqui e também sou novo em java… Será que me podia ajudar explicando-me onde está o meu erro.

É o seguinte, fiquei de construir um programa para verificar se uma palavra é palindromo (palavra que quando dividida ao meio é igual). E penso que acertei +/- no código. O problema e que quando corro o programa dá me o seguinte erro.

Digite a palavra

essa

Exception in thread main java.lang.StringIndexOutOfBoundsException: String index out of range: -1

at java.lang.String.substring(Unknown Source)

at src.exea.main(exea.java:29)

o código é o seguinte:

package src;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class exea {

	public static void main (String[] args) throws IOException {
		
		String palavra;
		int c;
		String esq, dir;
		boolean palindromo=true;
		
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		
		System.out.println("Digite a palavra");
		palavra = in.readLine();
		
		
		int numcar = palavra.length();
		
		for (c=1; c<=(numcar/2)-1;c++) { 
			
			esq=palavra.substring(c,1);
			dir=palavra.substring(numcar-1-c,1);
			
			if (esq.equals(dir)) {
				
				palindromo=true;
				
			}
			else {
				
				palindromo=false;
				
			}
			} while (palindromo==true);
			
			
			System.out.println(palavra+palindromo);
			
		}
				
}

2 Respostas

Guilherme_Gomes

StringIndexOutOfBoundsException
Você está tentando acessar um index que fica fora dos limites (out of bounds) da sua String, por exemplo, se a String tem 5 posicoes [0,1,2,3,4] e você tentar acessar qualquer outro valor (menores que 0 ou maiores que 4), terá um StringIndexOutOfBoundsException. Se você olhar os detalhes do erro, o programa tentou acessar a posição -1 na linha 29 do seu código.

A partir daí, é com você ^^

Ps: Palindromo é uma palavra que é igual quando lida de tras pra frente.

pmlm

O algoritmo está bem pensado mas mal executado.

1- A excepção está na utilização da substring. A segundo argumento da substring não é o numero de caracteres que queremos mas o indice do último.

2 - Uma vez que queres comparar caracter a caracter, não é necessário usar o substring, podes usar o charAt.

3 - Para que é o while no fim do for? O que queres é terminar o for assim que palindromo seja false?

String palavra;  
         
         boolean palindromo=true;  
           
         BufferedReader in = new BufferedReader(new InputStreamReader(System.in));  
           
         System.out.println("Digite a palavra");  
         palavra = in.readLine();  
           
         int numcar = palavra.length();  
         for (int c=0; c<=(numcar/2)-1;c++) {   
            if (palavra.charAt(c)!=palavra.charAt(numcar-1-c)){  // para comparar a "esquerda" e "direita". 
                palindromo = false; 
                break; // É false, pode sair do for
            }
         } 

         // Se nunca entrou no if, vem o true lá de cima, se entrou vem o false de onde entrou
         System.out.println(palavra+" é palindromo? " + palindromo);
Criado 14 de maio de 2009
Ultima resposta 14 de mai. de 2009
Respostas 2
Participantes 3