字符串对称程序
问题描述:
嘿,我可以使用一点帮助,找出为什么我的程序不工作。问题在于使用递归的程序,在删除所有标点符号和空白符后,如果给出的文本是回文,则会计算出该文本。当程序到目前为止编译时,它将每个值都返回为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));
}
}
}
答
的问题是,你没有包括案件或标点符号和空格任何检查。你可以做到这一点
一种方法是这样的。具体情况取决于您可以使用的任务,但您可能打算根据这些方面进行一些操作。
另外,还要注意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
你在哪里移除标点符号和空格? – vidit 2013-04-28 02:22:23