即使不是回文,回文检测器也会返回true
问题描述:
我需要确保在每次分配时都必须编写自己的原始代码,而不是复制其他人的代码。这看起来比你期望的要难。我试图写一个回文检测器作为任务的一部分。代码很好,除了一个问题。输出结果表明它是真实的,即使它不是一个回文序列,它以相同的字符开始和结束。请你帮我。这里是我的代码:即使不是回文,回文检测器也会返回true
public static boolean isPalindrome_nr(String word){
int beginning = 0;
int end = word.length() - 1;
boolean pd = true;
for (int i = end; i>0; i--){
if(word.charAt(0) == word.charAt(word.length()-1)){
pd = true;
}
else if (word.charAt(0) != word.charAt(word.length()-i)){
pd = false;
}
}
return pd;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
System.out.println("Is the string a palindrome or not? ");
String test = scan.nextLine();
System.out.println("Answer: " + isPalindrome_nr(test));
}
的目标是获得了这个词的测试,这是不是一个回文,注册为假,ABBA,这是一个回文,注册为真,应用程序,这是不是一个回文,注册为false。
答
您只比较第一个和最后一个字符。这还不足以确定字符串是否是回文。
你需要的东西是这样的:
pd = true;
for (int i = end; i>=0; i--){
if(word.charAt(i) != word.charAt(end-i)){
pd = false;
break;
}
}
这可以进一步提高,因为这个循环会测试所有对的两倍,因此它可能不够,我在年底结束/ 2或(结束/ 2) +1。
答
您只查看第一个和最后一个字符。该方法应该是这样的,使您的for循环实际上做什么它应该:
public static boolean isPalindrome_nr(String word) {
int beginning = 0;
int end = word.length() - 1;
boolean pd = true;
for (int i = end; i > 0; i--) {
// notice the use of i in here so that it will check all opposite chars
if(word.charAt(i) == word.charAt(word.length() - 1 - i)) {
pd = true;
}
else { // don't need the else-if
pd = false;
}
}
return pd;
}
只是作为一个额外的音符,还有另一种方式来测试一个字符串是否是回文与否:将其反转并测试反转字符串是否与原始字符串相同。像这样的(这是一个班轮):
public static boolean isPalindrome(String s) {
return new StringBuilder(s).reverse().toString().equals(s);
}
或者更长的路(倒车字符串以一个for循环,而不是使用StringBuilder#reverse()
方法
public static boolean isPalindrome(String s) {
StringBuilder reverseString = new StringBuilder();
// reverse the string
for (int i = s.length() - 1; i > -1; i--) {
reverseString.append(s.charAt(i));
}
// return whether or not the reversed string is equal to the original string
return reverseString.toString().equals(s);
}
你应该使用StringBuilder过的StringBuffer没有需要同步开销 – 2014-08-28 02:30:18
@ Smith_61其实我只是想复制错误的单词,谢谢。 – 2014-08-28 02:37:45