Escreva uma classe, chamada PalavraPalíndromo. A classe deve ter um
atributo do tipo array de caracteres (char); o construtor da classe; um método
que descubra se a palavra contida no array é um palíndromo; e um método
para mostrar a palavra na tela. Palíndromos são aquelas palavras que têm a
mesma escrita em ambos sentidos. Exemplos: veja como as palavras a seguir
podem ser lidas tanto da esquerda para a direita como da direita para a
esquerda.
?OVO?
?REVIVER?
?SOCORRAM-ME SUBI NO ONIBUS EM MARROCOS? (desconsiderar o hífen
neste exemplo)
Opa qual é a sua dúvida?! Tem alguma coisa feita?!
T
thingol
A dica é: crie dois métodos: um para tirar os espaços e hifens, e outro método para inverter as letras da palavra.
Tire os espaços e hifens da frase ou palavra.
A seguir, compare a frase ou palavra invertida com o original (devidamente removidos os espaços e hifens).
Se o resultado for igual, a palavra ou frase é um palíndromo.
a parte que eu ja fiz
como faço esses metodos me ajuda
edipokbelo
aproveitando o topico e a duvida dele
como eu faço para no caso de digitar uma frase,eu colocar cada palavra em uma posição do array?
por exemplo eu digito: eu estou no guj
ele coloca isso em 4 posições do array.
como faz?
thiago.correa
String[]a="eu estou no guj".split(" ");for(Stringb:a){System.out.println(b);}
FredGeek
eu to atoa aqui no serviço e resolvi fazer o seu exercício
importjavax.swing.JOptionPane;publicclassPalavraPalindromo{privatechar[]palavra;publicbooleanverificaPalindromo(char[]palavra){this.palavra=newchar[palavra.length];intx=0;// preenche o vetor this.palavra ao contrario do parâmetro de entradafor(inti=palavra.length-1;i>=0;i--){this.palavra[x]=palavra[i];x++;}// verifica posição por posiçãofor(inti=0;i<palavra.length;i++){if(this.palavra[i]!=palavra[i]){returnfalse;}}// se não for diferente retorna truereturntrue;}publicstaticvoidmain(String[]args){StringstrPalavra;strPalavra=JOptionPane.showInputDialog("Digite uma Frase");// cria um vetor de char do tamanho da string digitada pelo usuário e o preenchechar[]character=newchar[strPalavra.length()];for(inti=0;i<character.length;i++){character[i]=strPalavra.charAt(i);}// cria um objeto da classe PalavraPalindromo e chama o método verificaPalindromo passando o vetorPalavraPalindromopl=newPalavraPalindromo();if(pl.verificaPalindromo(character)){JOptionPane.showMessageDialog(null,"É Palíndromo");}else{JOptionPane.showMessageDialog(null,"Não é Palíndromo");}}}
O método verificaPalindromo recebe um vetor de char ao invez de String por causa do seu enunciado.
D
danipaz
obrigado
muito obrigado mesmo, com base neste estou fazendo o meu, pois sou contra copias mas agradeço de novo cara,ah
vou postar aqui a solucao para outras pessoas que tiverem a mesma duvida
terem a sua pergunta respondida
grato pela sua colaboraçao
D
danipaz
SOLUCAO DO EXERCICIO
importjavax.swing.JOptionPane;publicclassPalavraPAlindromo{privatecharpalavra[];publicPalavraPAlindromo(){this(null);}publicPalavraPAlindromo(char[]palavra){this.palavra=palavra;}publicchar[]getPalavra(){returnpalavra;}publicvoidsetPalavra(char[]palavra){this.palavra=palavra;}/** METODO PARA VERIFICAR SE É PALINDROMO*/publicbooleanverificaPalindromo(char[]palavra){this.palavra=newchar[palavra.length];intx=0;/**PREENCHE O VETOR PALAVRA AO CONTRARIO DO PARAMETRO DE ENTRADA*/for(inti=palavra.length-1;i>=0;i--){this.palavra[x]=palavra[i];x++;}/** VERIFICA POSICOES*/for(inti=0;i<palavra.length;i++){if(this.palavra[i]!=palavra[i]){returnfalse;}}/** TRUE = SE NAO FOR DIFERENTE*/returntrue;}/** INICIO DO MAIN*/publicstaticvoidmain(String[]args){StringstrPalavra;strPalavra=JOptionPane.showInputDialog("DIGITE UMA PALAVRA");/**CRIA UM VETOR DE CHAR DO TAMANHO DA STRING DIGITADA*/char[]character=newchar[strPalavra.length()];for(inti=0;i<character.length;i++){character[i]=strPalavra.charAt(i);}/**CRIA UM OBJETO DA CLASSE E CHAMA O METODO VERIFICA PALINDROMO*/PalavraPAlindromopp=newPalavraPAlindromo();if(pp.verificaPalindromo(character)){JOptionPane.showMessageDialog(null,"É PALINDROMO");}else{JOptionPane.showMessageDialog(null,"NAO E PALINDROMO");}}}// GRATO AO FORUM GUJ PELA AJUDA NA SOLUÇAO DO EXERCICIO//
FredGeek
Tenho um crítica a solução do seu exercício,
pois a única coisa q vc mudou do meu código pro seu foi a adição disto:
destes 2 contrutores e 2 métodos, e ambos são desnecessários pois eles nunca faram nada,
pois o método verificaPalindromo exige um vetor de char, e com isso o setPalavra e o construtor com um vetor são desnecessários. O getPalavra e o construtor vazio nem se fala.
D
danipaz
sei la to acostumado a colocar get,set em tudo que faço , pois uso private nos atributos
O
ozix
Pois não use setters ou getters se você não vai precisar.
Marlon_Meneses
desta forma é bem mais simples:
publicstaticvoidmain(String[]args){StringBufferstringbuffer=newStringBuffer();Stringstring=JOptionPane.showInputDialog("digite algo");string=string.replace("-","").replace(" ","");stringbuffer.append(string);System.out.println((string.equals(stringbuffer.reverse().toString())?"palíndromo":"não é palindromo"));}
ViniGodoy
Oi. Quando for postar tópicos, por favor, não utilize letras maiúsculas no título. Procure também dar um título que descreva natureza do problema. Fica mais fácil “Como testo se é um palíndromo?” do que “Dúvida em exercício”.
Também tente usar a busca do fórum, a resposta desse exercício já foi dada diversas vezes, aqui mesmo no GUJ.
No caso do palíndromo, especificamente, você não precisa percorrer a palavra toda, como todos fizeram. Mas só meia palavra. Aqui está uma solução mais otimizada para o problema: http://www.guj.com.br/posts/list/96672.java#519330
FredGeek
Marlon Meneses:
desta forma é bem mais simples:
publicstaticvoidmain(String[]args){StringBufferstringbuffer=newStringBuffer();Stringstring=JOptionPane.showInputDialog("digite algo");string=string.replace("-","").replace(" ","");stringbuffer.append(string);System.out.println((string.equals(stringbuffer.reverse().toString())?"palíndromo":"não é palindromo"));}
Marlon Meneses, muito legal esse método reverse do StringBuffer, mas só me responde uma coisa, pq o StringBuffer e n o StringBuilder, me parece q o StringBuffer é mais indicado pra qdo utiliza-se threads, ou to enganado?
eu n usei strings pois o enunciado diz q tinha q ser vetor de char, mas a sua solução é mto boa, e eu n iria chegar a ela pois eu n conhecia este método reverse.
ViniGodoy
Seria realmente melhor fazer com StringBuilder.
O StringBuffer tem todos os métodos sincronizados. Pelo tipo de uso que se faz dessas classes, mesmo no caso de aplicações multi-threading, dificilmente o StringBuffer será recomendado. Isso pq, serão raras as vezes que o buffer está fora de um método synchronized, que já garantirá por si só um uso individual da classe.
O StringBuffer só deve ser usado se várias threads irão escrever no buffer ao mesmo tempo. Uma situação que acho difícil de imaginar na prática.
FredGeek
ViniGodoy, valeu pela resposta, agora eu saquei a diferença.