使用递归进行双字符串比较

时间:2011-10-24 11:17:00

标签: java

我在编程II课程中遇到一些问题并遇到了问题,想知道是否有人可以提供帮助?

问题要求用户输入一个字符串,该程序要反转输入字符串然后比较反向原始字符串,这必须以递归方式完成。

到目前为止,我有:

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;

       }    
}

我的问题是,它告诉我一切都是回文,我一遍又一遍地看着它,无法弄清楚原因!

3 个答案:

答案 0 :(得分:6)

你正在做两次工作(等等)。

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

应该是

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

你几乎得到了它: - )


另外,另一种表达方式

if (cond)
    return something;
else
    return false;

return cond && something;

因此你的最后一行可以写成

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

相关问题/答案:

答案 1 :(得分:3)

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

这不起作用。你想要backwardsinput.charAt(0) == input.charAt(0)。因为你扭转了它。

当我调试这样的东西时,我倾向于拆开所有复合语句,所以

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

会变成

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

当我们试图在一个表达式中放入过多时,我们都会犯下愚蠢的错误,所以这些都是开始寻找逻辑错误的好地方。

答案 2 :(得分:2)

您正在反转字符串,然后检查字符串是否与此相反。即它测试字符串被正确反转。

当你能做的时候不是反转字符串然后只检查一个字符串匹配它自己(速率比它反向)向后。