PALINDROMO
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.
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.
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
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
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
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
