2013-04-28 23 views
0

嘿,我可以使用一点帮助,找出为什么我的程序不工作。问题在于使用递归的程序,在删除所有标点符号和空白符后,如果给出的文本是回文,则会计算出该文本。当程序到目前为止编译时,它将每个值都返回为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)); 
    } 


} 

}

+2

你在哪里移除标点符号和空格? – vidit 2013-04-28 02:22:23

回答

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; 
    } 
+0

我真的很感谢帮助 – user2259570 2013-04-28 02:40:23