Pregunta Comparación de cadenas dobles usando recursión


Tengo problemas con una pregunta de mi clase de programación II y me he topado con una pared de ladrillos. Me preguntaba si alguien podría ayudarme.

La pregunta pide a un usuario que ingrese una cadena, el programa invierta la cadena de entrada y luego compare el inverso con el original, esto debe hacerse de forma recursiva.

Hasta ahora tengo:

public class question1 
{
public static void main(String args[])  
{

String input = JOptionPane.showInputDialog(null, "Please enter a sentence to determine if it is a palindrome.");
String backwardsinput = Reverse(input);
System.out.println(backwardsinput);
boolean Palindrome = PalindromeCheck(backwardsinput, input);

    if (Palindrome == true)

        {
        JOptionPane.showMessageDialog(null,"That is a palindrome!");
        }

    if (Palindrome == false)

        {
        JOptionPane.showMessageDialog(null,"That is not a palindrome"); 
        }

}

public static String Reverse (String input)
{
    if (input.length() <= 1)
    return input;

    else
    {
        char x = input.charAt(input.length()-1);               
        return x+Reverse(input.substring(0,input.length()-1));
    }

}



public static boolean PalindromeCheck (String backwardsinput, String input)
{

     if(input.length() == 0 || input.length() == 1)
            return true;

        if(backwardsinput.charAt(0) == input.charAt(input.length()-1))
            return PalindromeCheck(backwardsinput.substring(1, backwardsinput.length()-1), input.substring(1, input.length()-1));

        else
        return false;

       }    
}

Mi problema es que me dice que todo es un palíndromo, lo he visto una y otra vez y no puedo entender por qué.


5
2017-10-24 11:16


origen


Respuestas:


Estás haciendo el trabajo dos veces (más o menos).

if(backwardsinput.charAt(0) == input.charAt(input.length()-1))
                                            ^^^^^^^^^^^^^^^^

debiera ser

if (backwardsinput.charAt(0) == input.charAt(0))
                                             ^

Casi lo tienes :-)


Además, otra forma de expresar.

if (cond)
    return something;
else
    return false;

es

return cond && something;

por lo tanto, sus últimas líneas podrían escribirse como

return backwardsinput.charAt(0) == input.charAt(0) &&
       palindromeCheck(backwardsinput.substring(1, backwardsinput.length() - 1),
                                input.substring(1, input.length() - 1));

Pregunta / respuesta relacionada:


6
2017-10-24 11:20



if(backwardsinput.charAt(0) == input.charAt(input.length()-1))

Esto no funciona Usted quiere backwardsinput.charAt(0) == input.charAt(0). porque lo revocaste

Cuando depuro algo como esto, tiendo a separar todas mis declaraciones compuestas, por lo que

if(backwardsinput.charAt(0) == input.charAt(input.length()-1))

se convertiría

char bc = backwardinput.charAt(0);
char ic = input.charAt(input.length()-1);
System.println(bc);
System.println(ic);
if (bc == ic) {

Todos cometemos errores tontos cuando tratamos de poner demasiado en una expresión, por lo que estos son buenos lugares para comenzar a buscar errores de lógica.


3
2017-10-24 11:23



Usted está invirtiendo la cadena y luego verificando que la cadena coincida con esta inversa. es decir, comprueba que la cadena se invirtió correctamente.

Cuando puede hacerlo, no invierta la secuencia y luego solo verifique que una Cadena se empareje (a la velocidad más que a la inversa) hacia atrás.


2
2017-10-24 11:20