
Uno de los primeros programas que recuerdo resolver en la Universidad, cuando estudiaba informática, es el saber si una palabra es un palíndromo.
Palíndromo, 1. m. Palabra o frase que se lee igual de izquierda a derecha, que de derecha a izquierda; p. ej., anilina; dábale arroz a la zorra el abad.
Mediante el lenguaje Java unas pocas líneas de código nos ayudarán a resolver el problema. La idea general es ir recorriendo la palabra desde izquierda a derecha, incrementando carácter a carácter y a la misma vez ir recorriendo la palabra de derecha a izquierda, decrementando los caracteres.
En cada incremento/decremento compararemos los valores de los caracteres. Si son iguales, la palabra podrá ser un palíndromo, en cuanto tengamos dos valores distintos, la palabra ya no será un palíndromo.
Pero veámoslo con código. Lo primero será definir la palabra y las posiciones inicio y fin.
int inc = 0;
int des = sPalabra.length()-1;
boolean bError = false;
Además hemos declarado una variable que actuará en forma de guarda, por lo que inicialmente consideramos que no hemos encontrado incongruencias en la palabra.
Hay que fijarse que la posición inicial será 0 y la final, el ultimo carácter. Este valor lo conseguimos restandole 1 al tamaño de la cadena.
Ahora el bucle. Tenemos que iterar por la cadena mientras los contadores no se crucen y mientras no hayamos encontrado ningún error. De esta manera, el código del bucle quedará de la siguiente forma:
while ((inc<des) && (!bError)){...}
Y dentro del bucle la validación de caracteres. Todo el código sería:
while ((inc<des) && (!bError)){
if (sPalabra.charAt(inc)==sPalabra.charAt(des)){
inc++;
des--;
} else {
bError = true;
}
}
Vemos, que si algún par de caracteres no coinciden, entonces se cambia el valor de la variable de guarda, lo que hará que nos salgamos del bucle inmediatamente.
Una vez que hayamos salido del bucle, la variable de guarda nos dirá si la palabra es un palíndromo. Esto es si sigue con el valor inicial, es decir false.
if (!bError)
System.out.println(sPalabra + " es un PALINDROMO");
else
System.out.println(sPalabra + " NO es un palindromo");
LILIAN
Escriba un programa que determine si una palabra es palíndromo. Un palíndromo es un array de caracteres que se lee de igual forma en ambos sentidos; por ejemplo ana.
Alejandro Coronado Rubio
Adjunto mi solución al problema, fue lo más sencillo que se me ocurrió
String palabra = JOptionPane.showInputDialog(«Inserta una palabra»);
String palabra2 = palabra.toLowerCase().replace(» «, «»);
String palindromo = new String();
char [] invertir = palabra2.toCharArray();
for(int i = invertir.length-1 ; i>=0; i–){
palindromo += invertir[i];
}
JOptionPane.showMessageDialog(null, (palabra2.equals(palindromo) ? palabra + » es un palíndromo» : palabra + » no es un palíndromo»));
donovan david
QUIEN ME ALLUDA CON ESTE CODIGO
En una lista encadenada circular se almacenan palabras o numeros se pide realizar clases, metodos,y el provador para registrar una palabra o numero y determinar si es palindrome o capicua
fernando
Problemática:
– Desarrolla una aplicación, la cual debe realizar lo siguiente:
a) Ingresar una palabra o frase, por parte del usuario.
b) Mostrar la cadena de caracteres ingresada y la cantidad de caracteres que tiene. Lo anterior de la siguiente forma «palabra o frase tiene __ caracteres».
c) Invertir la cadena y mostrarla.
d) Identificar y mencionar si la palabra o frase ingresada, es un palíndromo. Mostrando en una ventana de dialogo de mensaje el texto «Si es palíndromo» o de lo contrario «No es palíndromo».
se como crear
yaguarete79
Existe una forma más sencilla, y es utilizando recursión.
La forma más elegante es utilizar un método al que vamos a llamar con la palabra solamente, y dicho método llama al recursivo con más parámetros, en este caso, índice de inicio e indice final.
De esta forma, voy comparando la primer letra contra la última de la palabra, en la primer llamada. Luego en el siguiente llamado comparo la segunda letra contra la penúltima, y así sucesivamente mientras sean iguales y hasta que llegue al caso base, que es que esté «visualizando» un string de largo 0 (terminé de recorrer un string de largo par) o uno de largo 1 (cuando el largo es impar).
Si en cualquier momento antes de llegar al caso base, una comparación me da false, ya no sigo recorriendo y retorno false. Esto hace además, eficiente la recorrida, y como todo método recursivo conlleva muchas menos líneas de código.
Espero les sirva.
public static boolean esPalindromo(String palabra){
return esPalindromo(palabra, 0, palabra.length()-1);
}
private static boolean esPalindromo(String palabra, int ini, int fin){
//si el largo es par, cuando llego a largo 0 llegué a mi caso base
//si es impar, cuando llego a largo 1 terminé de recorrer el string
//(debido al desfase de índices en Java (comienzan en 0 en lugar de 1),
//sumo 1 a la resta de las posiciones final e inicial, para que dicha diferencia sea
//igual al largo real de la porción de palabra que estoy recorriendo
if(fin-ini+1==0 || fin-ini+1 == 1)
return true;
else{
if(palabra.charAt(ini) == palabra.charAt(fin)){
return esPalindromo(palabra, ini+1, fin-1);
}
else{
return false;
}
}
}
gonzalo alonso
calla guarra
AHMED
CALLATE TU IMPURO.
TE LLEVARÉ ANTE ALA Y TE LAPIDAREMOS CUANDO EL SOL ESTE EN SU CENIT, SOLO TENDRAS DERECHO A HABLAR DESPUES DE HABER RECIVIDO 5000 LATIGAZOS ANTES DE LA LAPIDACION.
ALEA JACTA EST.
IVANOCHA777
Inclinaos ante el peor jugador de EWEST
dimas colon
package teclado;
import javax.swing.*;
public class Palindrome {
public static void main(String[] args) {
// TODO Auto-generated method stub
String c = new String(JOptionPane.showInputDialog(«cadena»)); /*atrapo la cadena como string*/
/*declaro una variable stringbuffer para convertir el string ingresado a stribgbuffer*/
StringBuffer cadena_a_buffer = new StringBuffer(c);
StringBuffer na= cadena_a_buffer.reverse(); /*uso el metodo reverse para escribirla al reves*/
StringBuffer sbuf = new StringBuffer(na); /*creo una variable para que la palabra al rever la pueda volver a string*/
String cadreversaenstring = sbuf.toString(); /* la convierto a string*/
System.out.println(c);
System.out.println(cadreversaenstring);
if(c.equals(cadreversaenstring)) { /*las comparo*/
System.out.print(«SI ES PALINDROME»);
}
else {
System.out.print(«no es palindrome»);
}
}
}
rolando lizarraga
/*Con el siguiente código limpias de espacios en blanco la cadena*/
String str=»hola mundo de nuevo»;
String sinespacios=str.replaceAll(«\\s+»,»»);
System.out.println(«EL sistema dice: «+sinespacios );
/*Hay que tener en cuenta que la cadena original queda intacta*/
yo
todo mal
codigo separa
errores de compilacion.
Deberian de poner solo codigo testeado y completo
yaguarete79
Hola chicos, hay un error en el código. Lo estoy probando con JavaScript que aunque no es lo mismo, les aviso de la corrección porque es a nivel de estructura, entonces no importa el lenguaje.
Se me colgaba el programa queriendo validar «anidlina», sin embargo «anilina» lo validaba bien, como debe ser.
Debuggeando el código me di cuenta que el problema es que nunca salía del loop while, y esto es debido a que como al llegar a validar «d» contra «l» y encontrar que eran diferentes, directamente se pasaba al «else», sin incrementar «inc» ni decrementar «des», por lo que nunca se cumplía la condición de salida del while.
La solución es incrementar y decrementar después del if (y el else, claro), así:
while (inc<=des){
if(verTexto.charAt(inc)==verTexto.charAt(des)){
confirmaPalindromo=true;
}
else{
confirmaPalindromo=false;
}
inc++;
des–;
}
if(confirmaPalindromo){
alert("El texto " + verTexto + " es un palíndromo");
}
else{
alert("El texto " + verTexto + " NO es un palíndromo");
}
Disculpen por pasarlo en JavaScript, pero la idea es la misma. Yo agregué unos flags para, basándome en ellos, dar el mensaje al usuario. Eso lo hará cada quien a su gusto, sólo quise contribuir un poco más.
Pero gracias porque con la idea base que dieron pude resolver este dilema.
donovan david
ME ALLUDA CON ESTE CODIGO PORFAVOR
En una lista encadenada circular se almacenan palabras o numeros se pide realizar clases, metodos,y el provador para registrar una palabra o numero y determinar si es palindrome o capicua
Breyner Ruiz (COLOMBIA-BARRANQUILLA,ATLANTICO)
joda que enredo que tienen ahi!!
elisa
asi es el programa completo pero falta una clase en dond se agreguen los metodos
en este caso es la clase pila
import javax.swing.*;
public class Palindrome {
public static void main(String[] args) {
String cadena;
Cola uno;
Cola dos;
cadena=JOptionPane.showInputDialog(«ingrese la cadena»);
int tam=cadena.length();
uno=new Cola(tam);
dos=new Cola(tam);
int i=0;
while(i-1){
if(cadena.charAt(k)!=’ ‘){
dos.insertar(cadena.charAt(k));
}
–k;
}
while((!uno.estaVacia())&&(!dos.estaVacia())){
char c1=uno.sacar();
char c2=dos.sacar();
if(c1==c2)
break;
}
if((uno.estaVacia())&&(dos.estaVacia())){
JOptionPane.showMessageDialog(null,»es palindromo»);
}
else{
JOptionPane.showMessageDialog(null,» no es palindromo»);
}
}
}
elisa
while((!uno.estaVacia())&&(!dos.estaVacia())){
char c1=uno.sacar();
char c2=dos.sacar();
if(c1==c2)
break;
}
if((uno.estaVacia())&&(dos.estaVacia())){
JOptionPane.showMessageDialog(null,»es palindromo»);
}
else{
JOptionPane.showMessageDialog(null,» no es palindromo»);
}
Deyner Paul Reinoso Rosado
Renz, de esta forma puedes reversar una cadena. Solo tienes que usarla en tu aplicación.
String cadenaRev=”»;
for(int i=0;i<cadena.length();i++){
cadenaRev+=cadena.charAt(i);
}
Renz
hola!
necesito Realizar una aplicación que contenga un TextField, y cuando se pulse un botón, invierta su contenido y lo muestre en el mismo TextField.
Además, contará con un checkbutton. Si dicho botón está marcado en el momento de pulsar el botón “INVERTIR”, se hará una comprobación adicional que nos diga si el texto escrito es un palíndromo. Este resultado se mostrará en un textfield adicional.
PROGRAMA DE TIEMPOS DE EJECUCION
PoR FaVoR necesitO AyUda URGENTE URGENTE URGENTE !!!!! DE UN PROGRAMA EN JAVA
ESTE EL PROBLEMA (NECESITO PRESENTAR HASTA EL DIA VIERNES)
En un servidor de la universidad se mandan programas de ordenador para ser ejecutados. Los programas llegan al servidor con una tasa de 10 por minuto. El tiempo medio de ejecución de cada programa es de 5 segundos y tanto los tiempos entre llegadas como los tiempos de ejecución se distribuyen exponencialmente.
a) ¿Qué proporción de tiempo está el servidor desocupado?
b) ¿Cuál es el tiempo esperado total de salida de un programa?
c) ¿Cuál es el número medio de programas esperando en la cola del sistema?
Y GRACIAS DE ANTEMANO POR SU AYUDA ME SERVIRIA MUCHISIMO!!!
Alejo
como seria todo el codigo para identificar un numero capicua
Deyner Paul Reinoso Rosado
Espero te sirva este método, en versiones antiguas de java puedes comparar las cadenas con «==», personalmente no lo recomiendo.
public static boolean esPalindromo(String cadena){
String cadenaRev=»»;
for(int i=0;i<cadena.length();i++){
cadenaRev+=cadena.charAt(i);
}
if(cadenaRev.equalsIgnoreCase(cadena))
return true;
else
return false;
}
mishi
hola como puedohacer palindromo sin utilizar metodos definidos de String y tampoco StringBuffer por favor ayudenme
lineadecodigo
@Deyner,
Muy bueno. :-))).
He publicado el artículo Palindromos en Java con Reverse siguiendo las indicaciones de Deyner.
Deyner Reinoso
Corrijo el codigo anterior:.
public void palindromo(String cadena){
StringBuffer sb=new StringBuffer(cadena);
String cadenaRev=new String(sb.reverse());//aquí creo un String con el inverso de la cadena original, luego solamente comparo la original con la reversada.
if(cadena.compareTo(cadenaRev)==0)
System.out.print(cadena+”: es un palindromo”);
else
System.out.print(cadena+”: no es palindromo”);
}
lineadecodigo
@lidia,
Ya está corregido el enlace para descargar el código.
lineadecodigo
@Kristian,
Correcto. Hay que limpiar los espacios en blanco. El problema es que con trim quitamos solo el espacio inicial y el final.
Puedes echarle un ojo a Eliminar espacios en blanco con Java…
Aunque valdría un .replace(‘ ‘,»);
Espero que te sirva.
lineadecodigo
@Manuel,
Efectivamente, si hay acentos el código no funciona. Hay que trabajar sobre ello. A bote pronto se me ocurre un replace(‘á’,’a’), pero puede ser un poco trabajoso.
¿A alguien se le ocurre algo?
Intentaremos publicar algo al respecto.
lineadecodigo
@Deyner, muy buen ejemplo. Falta aplicar el método reverse sobre el StrinBuffer ;-)
Voy a ver si lo codifico para que lo tengamos explicado.
Nuevamente, muchas gracias.
Deyner Reinoso
una forma mas corta de hacer palindromo es usando StringBuffer asi:
public void palindromo(cadena){
StringBuffer sb=new StringBuffer(cadena);
String cadenaRev=new String(sb);
if(cadena.compareTo(cadenaRev)==0)
System.out.print(cadena+»: es un palindromo»);
else
System.out.print(cadena+»: no es palindromo»);
}
Como pueden ver el StringBuffer tiene la propiedad directa de reversar la cadena. haciendo mas facil el proceso.
kristian
en la parte donde va a guardar la palabra hace un trim() para ke elimine los espacios en blanco ahi deberia funcionar
salu2
Manuel
Tendrías que aclarar que esto es válido sin tener en cuenta espacios en blanco, ni acentos ni mayúsculas.
Por ejemplo, en «dábale arroz a la zorra el abad», no se cumpliría.
Un saludo.
Diana
no puedo
roberto
hola soy roberto quisiera que me ayudaran con el codigo en java del programa de la palabra palindrome es que la neta no e podido realizarlo espero me ayuden.Gracias
ITSZaS
Oigan cabe destacar que eso no esta muy claro a mi no me sirvio yo soy principiante y aun no se NADA, pero gracias de todos modos se agradece.
lidia
El link para descargar el archivo esta mal, se produce un error y me manda a una pagina :: «Vaya el link esta mal» corrigelo por favor.
unefa
import java.util.*;
import java.io.*;
class Palindrome
{
static String palabra;
static public void main(String argv[])
{
try{
Scanner archivo=new Scanner(new File(«test.txt»));
while(archivo.hasNext())
{
palabra=archivo.next();
System.out.println(palabra);
if(palindrome(palabra))
System.out.println(«si»);
else
System.out.println(«no»);
}
}
catch(FileNotFoundException x)
{
}
}
static boolean palindrome(String x)
{
if(x.equals(reverse(x)))
return true;
else
return false;
}
static String reverse(String x)
{
int n=x.length();
char temp[]=new char[n];
int z=n-1;
for(int i=0; i<n; i++)
{
temp[i]=x.charAt(z);
z–;
}
//System.out.println(«reverse:»+temp);
return temp.toString();
}
}
me podrian ayudar a resolver
Kimberly Morales
necesito saber que codigo utilizar para crear palindromos
yover
por favor quisiera saber si me pueden ayudar en este ejercicio
ingresar una frase y presentar las iniciales en maysculas.
graciasss.
yover
ingresar una frase y presentar en iniciales en mayusculas
lineadecodigo
Hola Jesús,
Se ha colado una errata en el código. Realmente se tiene que comprobar con el método charAt en ambos casos.
Ya he corregido el código.
Muchas gracias.
Jesus
Disculpa el ejemplo me marca error. Me lo marca en el codePointAt
Me sale esto:
Palindromo.java:30: cannot resolve symbol
symbol : method codePointAt (int)
location: class java.lang.String
if (sPalabra.charAt(inc)==sPalabra.codePointAt(des)){
^
1 error
—-jGRASP wedge2: exit code for process is 1.
—-jGRASP: operation complete.