Java 使用递归的双字符串比较

Java 使用递归的双字符串比较,java,Java,我在编程II课上遇到了一个问题,遇到了麻烦,我想知道是否有人能帮我 问题要求用户输入字符串,程序将输入字符串反转,然后将反转与原始字符串进行比较,这必须递归完成 到目前为止,我已经: public class question1 { public static void main(String args[]) { String input = JOptionPane.showInputDialog(null, "Please enter a sentence to determine i

我在编程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;

       }    
}
公开课问题1
{
公共静态void main(字符串参数[])
{
String input=JOptionPane.showInputDialog(null,“请输入一个句子以确定它是否是回文”);
字符串后退输入=反向(输入);
系统输出打印LN(后向输入);
布尔回文=回文检查(BackardsInput,input);
if(回文==true)
{
showMessageDialog(null,“这是回文!”);
}
if(回文==false)
{
showMessageDialog(null,“这不是回文”);
}
}
公共静态字符串反转(字符串输入)
{

如果(input.length()您做了两次工作(有点)

应该是

if (backwardsinput.charAt(0) == input.charAt(0))
                                             ^
你差点就成功了:-)


还有,另一种表达方式

if (cond)
    return something;
else
    return false;

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

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

相关问题/答案:


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

您可以做的是不反转字符串,然后只检查字符串是否与自身相匹配(ratehr大于其反转)

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) {

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

最后一点很有帮助,我不知道你可以这样构造返回语句,谢谢!谢谢aiobe,我不知道返回的方式,但现在我想起来,这没有意义,因为这就像一行if-else语句!哪一行没有意义?我的建议?那将是理想的情况!不幸的是,对我来说,问题特别指出我们必须将其反转,并递归地将原始与反转进行比较:(您可以保留它,并将第一个字符与第一个字符进行比较以比较字符串。这种逻辑分解是一个很棒的主意,是发现错误的好方法。谢谢!也许他们应该先教您如何格式化代码,然后转到其他主题。如果您能指出我做错了什么,或者向我介绍一些相关资源,请参阅这件事,我会很感激的。我只是想学习,并尽我所能做好工作。@Bohemian:这不是我见过的最糟糕的格式,只是最上面的部分需要一些工作!还有Eogcloud,我喜欢你的代码,不管格式和错误!:-)
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) {