1

嘿,我可以使用一点帮助来弄清楚为什么我的程序不工作。问题是使用递归来制作一个程序,该程序在删除所有标点符号和空格后计算给出的文本是否是回文。到目前为止,程序编译时,它会将每个值都返回为 false。我们只允许更改 isSymmetrical 方法。我可以使用任何可能的帮助来弄清楚如何完成这项工作。谢谢你。

public class StringSymmetry {

public static boolean isSymmetrical(String inputText)
{
    if(inputText.length() == 0 || inputText.length() ==1)
        return true;

    if(inputText.charAt(0) == inputText.charAt(inputText.length()-1))
        return isSymmetrical(inputText.substring(1,inputText.length()-1));

        return false;
}



public static void main(String[] args) {
    String[] sampleData = 
        { "Don't nod",
          "Dogma: I am God",
          "Too bad - I hid a boot",
          "Rats live on no evil star",
          "No trace; not one carton",
          "Was it Eliot's toilet I saw?",
          "Murder for a jar of red rum",
          "May a moody baby doom a yam?",
          "Go hang a salami; I'm a lasagna hog!",
          "Name is Bond, James Bond"
        };

    for (String s : sampleData)
    {
        System.out.println("isSymmetrical (" + s + ") returns " + isSymmetrical(s));
    }


}

}

4

2 回答 2

1

问题是您没有对大小写或标点符号和空格进行任何检查。

你可以这样做的一种方法是这样的。具体情况取决于您被允许用于作业的内容,但您可能打算按照这些方式做一些事情。

另外,请注意,toLowerCase如果您将默认语言环境设置为像土耳其这样的不寻常的地方,则会出现问题。为了获得适当的稳健性,您需要指定语言环境,但这不是您在家庭作业中必须担心的事情。

  public static boolean isSymmetrical(String inputText)
  {
      inputText = inputText.toLowerCase();

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

      if(!Character.isLetter(inputText.charAt(0)))
        return isSymmetrical(inputText.substring(1,inputText.length()));

      if(!Character.isLetter(inputText.charAt(inputText.length()-1)))
        return isSymmetrical(inputText.substring(0,inputText.length()-1));      

      if(inputText.charAt(0) == inputText.charAt(inputText.length()-1))
          return isSymmetrical(inputText.substring(1,inputText.length()-1));

      return false;
  }
于 2013-04-28T02:31:21.847 回答
1

检查以下功能:

public static boolean isPalindrome(String str, int x) {
    if(x == 0) return true;

    if(str.charAt(0) == str.charAt((str.length() - 1)))
        return isPalindrome(str.substring(1, str.length() - 1), x - 1);
    return false;
}

解释:

具有以下参数的递归函数:

  1. str- 将测试对称性的 String 对象。
  2. x- 表示递归测试器参数的整数,它决定了您要迭代多远并检查两侧对称性。

基本情况设置为零并true在您完成所需的迭代次数时返回。

第二个if 条件语句用于检查给定字符串的角点,它的return语句将递归地进入另一个测试循环,其中原始字符串的角点更短(...角点将短一)。

于 2022-02-12T14:19:36.883 回答