PALINDROMO

alcatraz
10 de Marzo del 2005
COMO PUEDO REALIZAR UN PROGRAMA QUE DIGA SI LA PALABRA QUE ESCRIBO ES PALINDROMO O NO LO ES.

import java.io.*;
class Palindromo{

public static void main(String[]arg){
int inicio,fin;
String cad;
char arr[]=new char[100];
boolean band=true;
Leer ob=new Leer();
System.out.print("Da la cadena (sin espacion): ");
cad=ob.dato();
fin=cad.length()-1;
inicio=0;
for(int i=0;i<=fin;i++){
arr[i]=cad.charAt(i);
}
while (inicio<fin);
if(arr[inicio]!=arr[fin]){
band=false;

}
inicio=inicio+1;
fin=fin-1;

if(band==true){
System.out.println("La cadena es un palindromo");
}else{
System.out.println("La cadena no es un palindromo");
}
}
}
ESTO ES LO QUE TENGO PERO NO SE CUAL ES MI ERROR PORQUE AL EJECUTARLO NO ME DICE SI LA PALABRA QUE ESCRIBO ES PALINDROMO O NO.

David
10 de Marzo del 2005
Hola

Pues no te dice si es palíndromo o no: se limita a guardar un respetuoso silencio.

El problema es que tienes un bucle infinito como un castillo. Revisa tu código:
...
cad = ob.dato();
fin = cad.length() - 1;
inicio = 0;
for (int i = 0 ; i <= fin ; i++) {
arr[i] = cad.charAt(i);
}

while (inicio < fin);
...

La variable fin contiene el índice del último carácter en cad.
La variable inicio vale 0.
Ejecutas un bucle for para rellenar el array (que como te metan más de 100 caracteres la hemos liado, por cierto, y hay palíndromos más largos que esa cantidad). Este bucle no te modifica ninguno de los dos valores anteriores.
Y seguidamente ejecutas un maravilloso

while (inicio < fin);

que se ejecutará por el resto de la eternidad de no ser que la entrada sea la cadena vacía (que, efectivamente, es palíndroma).

¿Por qué no utilizas StringBuffer.reverse() y comparas?

public static boolean esPalindromo(String cadena) {
return (new StringBuffer(cadena).reverse().toString()).equals(new StringBuffer(cadena).toString());
}

¿A que es más molón?

Salud

David

David
10 de Marzo del 2005
Hola

Ahí va un palíndromo de 117 caracteres para que hagas tus pruebas:

alliporlatropaportadotraidoaeseparajedemaniobrasunatipacomocapitanusarboinamedejarapeseaodiartodatropaportalropilla

Queda más legible así:

Allí por la tropa portado, traído a ese paraje de maniobras, una tipa como capitán usar boina me dejara, pese a odiar toda tropa por tal ropilla.

Su autor se llama Luis Torrent.

Salud

David