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)
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.
eu to atoa aqui no serviço e resolvi fazer o seu exercício
[code]import javax.swing.JOptionPane;
public class PalavraPalindromo {
private char[] palavra;
public boolean verificaPalindromo(char[] palavra){
this.palavra = new char[palavra.length];
int x = 0;
// preenche o vetor this.palavra ao contrario do parâmetro de entrada
for(int i=palavra.length-1;i>=0;i--){
this.palavra[x] = palavra[i];
x++;
}
// verifica posição por posição
for(int i=0;i<palavra.length;i++){
if(this.palavra[i] != palavra[i]){
return false;
}
}
// se não for diferente retorna true
return true;
}
public static void main(String[] args) {
String strPalavra;
strPalavra = JOptionPane.showInputDialog("Digite uma Frase");
// cria um vetor de char do tamanho da string digitada pelo usuário e o preenche
char[] character = new char[strPalavra.length()];
for(int i = 0; i<character.length;i++){
character[i] = strPalavra.charAt(i);
}
// cria um objeto da classe PalavraPalindromo e chama o método verificaPalindromo passando o vetor
PalavraPalindromo pl = new PalavraPalindromo();
if(pl.verificaPalindromo(character)){
JOptionPane.showMessageDialog(null, "É Palíndromo");
} else{
JOptionPane.showMessageDialog(null, "Não é Palíndromo");
}
}
}
[/code]
O método verificaPalindromo recebe um vetor de char ao invez de String por causa do seu enunciado.
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
import javax.swing.JOptionPane;
public class PalavraPAlindromo
{
private char palavra[];
public PalavraPAlindromo()
{
this(null);
}
public PalavraPAlindromo(char[] palavra)
{
this.palavra = palavra;
}
public char[] getPalavra()
{
return palavra;
}
public void setPalavra(char[] palavra)
{
this.palavra = palavra;
}
/** METODO PARA VERIFICAR SE É PALINDROMO*/
public boolean verificaPalindromo(char[] palavra)
{
this.palavra = new char[palavra.length];
int x = 0;
/**PREENCHE O VETOR PALAVRA AO CONTRARIO DO PARAMETRO DE ENTRADA*/
for(int i=palavra.length-1;i>=0;i--)
{
this.palavra[x] = palavra[i];
x++;
}
/** VERIFICA POSICOES*/
for(int i=0;i<palavra.length;i++)
{
if(this.palavra[i] != palavra[i])
{
return false;
}
}
/** TRUE = SE NAO FOR DIFERENTE*/
return true;
}
/** INICIO DO MAIN*/
public static void main(String[] args) {
String strPalavra;
strPalavra = JOptionPane.showInputDialog("DIGITE UMA PALAVRA");
/**CRIA UM VETOR DE CHAR DO TAMANHO DA STRING DIGITADA*/
char[] character = new char[strPalavra.length()];
for(int i = 0; i<character.length;i++)
{
character[i] = strPalavra.charAt(i);
}
/**CRIA UM OBJETO DA CLASSE E CHAMA O METODO VERIFICA PALINDROMO*/
PalavraPAlindromo pp = new PalavraPAlindromo();
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//
pois a única coisa q vc mudou do meu código pro seu foi a adição disto:
[code]
public PalavraPAlindromo()
{
this(null);
}
public PalavraPAlindromo(char[] palavra)
{
this.palavra = palavra;
}
public char[] getPalavra()
{
return palavra;
}
public void setPalavra(char[] palavra)
{
this.palavra = palavra;
} [/code]
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.
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
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.
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.