【问题标题】:Double string comparison using recursion使用递归的双字符串比较
【发布时间】:2011-10-24 11:16:59
【问题描述】:

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

       }    
}

我的问题是,它告诉我一切都是回文,我看了一遍又一遍,不知道为什么!

【问题讨论】:

  • 也许他们应该首先教你如何格式化你的代码,然后再转到其他主题。
  • 如果您能指出我做错了什么或向我指出有关此事的一些资源,我将不胜感激。毕竟我只是想学习并尽我所能。
  • @Bohemian:不是我见过的最糟糕的格式 - 它只是需要一些工作的顶部!和 Eogcloud,我喜欢你的代码,尽管格式和错误! :-)

标签: java


【解决方案1】:

你做了两次工作(有点)。

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

相关问题/答案:

【讨论】:

  • 最后一点很有帮助,我不知道你可以这样构造返回语句,谢谢!
  • 谢谢 aiobe,我不知道这种返回方式,但现在我想起来,它没有意义,因为它就像一个单行 if else 语句!
  • 哪个没有意义?我的提议?
【解决方案2】:
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) {

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

【讨论】:

  • 逻辑分解是一个很棒的想法,是发现错误的好方法。谢谢!
【解决方案3】:

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

当你可以做的是不反转字符串然后只检查一个字符串是否匹配自身(ratehr比它的反转)。

【讨论】:

  • 那将是理想的情况!对我来说不幸的是,这个问题明确指出我们必须将其反转并递归地将原始与反向进行比较:(
  • 您可以保留它,并将第一个字符与第一个字符进行比较以比较字符串。
猜你喜欢
  • 1970-01-01
  • 2015-10-25
  • 2017-07-03
  • 2016-04-28
  • 1970-01-01
  • 1970-01-01
  • 2015-03-21
  • 2019-07-24
  • 1970-01-01
相关资源
最近更新 更多