字符串对称程序

时间:2013-04-28 02:20:06

标签: java recursion symmetry

嘿,我可以用一点帮助来弄清楚为什么我的程序不起作用。问题是使用递归制作程序,在所有标点符号和空格被删除后,如果给出的文本是回文或不是回文。虽然程序到目前为止编译,但它返回每个值为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));
    }


}

}

1 个答案:

答案 0 :(得分: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;
  }