Palíndromo: 2 métodos, com int, outro com String

3 respostas
F

Olá,

sei que há vários fóruns com palíndromo, mas gostaria de tirar dúvida sobre meu próprio código...

Palíndromo é o número ou palavra ou frase que lido de trás pra frente é exatamente igual se lido de frnte pra trás...

Exemplo:

11211
ou
ana
ou
amoreroma
...

Meus códigos compilam mas não funcionam...

Se alguém puder ajudar a corrigi-los ficarei grato!

class Testando{
  
  boolean ehPalindromoNRO(int n){
    
    boolean ok = false;
    
    int nroAlg = 1;
    while(n/10 != 0){
      n = n/10;
      nroAlg++;
    }
    //verifica qtos algarismos possui n
    
    int[] alg = new int[nroAlg - 1];
    
    int vezes = 0;
    for(int i = nroAlg - 1; i >= 0; i--){
      for(int d = 0; d < nroAlg - i; d++){
        int[] dez = new int[nroAlg - i];
        dez[d] = 10;
        vezes = 10*dez[d];
      }
      alg[i] = n % vezes;
    }
    //cada algarismo vale "tanto"
    
    int i = 0;
    int j = nroAlg - 1;
    while(i < nroAlg && j >= 0){
      if(alg[i] == alg[j]){
        ok = true;
      }
      i++;
      j--;
    }
    return ok;
  }
  //compara o 1º com o último, o 2º com o penúltimo...
  
  boolean ehPalindromo(String texto) {
    boolean ok = false;
    int i = 0;
    int j = texto.length() - 1;
    while(i < texto.length() && j >= 0) {
      char c = texto.charAt(i);
      char d = texto.charAt(j);
      if(c == d){
        ok = true;
      }
      i++;
      j--;
      
    } 
    return ok;
  }
}

Obrigado!

3 Respostas

Kassiane_Pretti

Pq vc não usa um método para inverter a string, ai vc compara a original com a invertida…
Dá uma olhadinha neste post:
http://www.guj.com.br/posts/list/87550.java

Até \o/

ViniGodoy

Que complicação...

Basta testar o primeiro com o último. O segundo com o penultimo, o terceiro com o antepenultimo, etc...
Ou seja, num deles vc testa a posição i, no outro a posição ultimoIndice - i.
E basta variar i só até metade do tamanho String (você já está testando as duas metades juntas).

public class Palindromos {
    //O que seu professor espera
    public static boolean ePalindromo(String palavra) {
        int meio = palavra.length() / 2;
        for (int i = 0; i < meio; i++) {
            if (palavra.charAt(i) != palavra.charAt(palavra.length()-1 - i)) {
                return false;
            }
        }
        return true;
    }

    //Sugestão da KassiPretty.
    public static boolean ePalindromo2(String palavra) {
        return palavra.equals(new StringBuilder(palavra).reverse().toString());
    }

    public static void main(String [] args) {
        System.out.println("1. " + ePalindromo("ommo"));
        System.out.println("2. " + ePalindromo("a"));
        System.out.println("3. " + ePalindromo("socorrammesubinoonibusemmarrocos"));
        System.out.println("4. " + ePalindromo("Vinicius"));
        System.out.println("5. " + ePalindromo("eu amo oma ue"));
    }
}

A segunda é a sugestão que a KassiPretty deu.
É um pouco menos eficiente do que a primeira, mas também funciona. Exige um conhecimento um pouco maior da API.

F

É verdade, com essas 2 dicas deu pra entender bem onde eu estava complicando…
Consegui uma outra forma até:

boolean ehPalindromo(String texto) { for(int i = 0; i < texto.length(); i++){ char c = texto.charAt(i); char d = texto.charAt(texto.length() - 1 - i); if(c != d){ return false; } } return true; }

A outra forma é prática, mas não necessita muito de raciocínio…

Quanto ao palíndromo com int eu mudei o último for, mas acho que também estou complicando demais, ou será que é por aí?
É porque eu queria fazer com int também…

Obrigado!

Criado 11 de julho de 2008
Ultima resposta 12 de jul. de 2008
Respostas 3
Participantes 3