2014-08-28 86 views
-1

我需要确保在每次分配时都必须编写自己的原始代码,而不是复制其他人的代码。这看起来比你期望的要难。我试图写一个回文检测器作为任务的一部分。代码很好,除了一个问题。输出结果表明它是真实的,即使它不是一个回文序列,它以相同的字符开始和结束。请你帮我。这里是我的代码:即使不是回文,回文检测器也会返回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。

回答

4

您只比较第一个和最后一个字符。这还不足以确定字符串是否是回文。

你需要的东西是这样的:

pd = true; 
for (int i = end; i>=0; i--){ 
    if(word.charAt(i) != word.charAt(end-i)){ 
     pd = false; 
     break; 
    } 
} 

这可以进一步提高,因为这个循环会测试所有对的两倍,因此它可能不够,我在年底结束/ 2或(结束/ 2) +1。

0

您只查看第一个和最后一个字符。该方法应该是这样的,使您的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); 
} 
+0

你应该使用StringBuilder过的StringBuffer没有需要同步开销 – 2014-08-28 02:30:18

+0

@ Smith_61其实我只是想复制错误的单词,谢谢。 – 2014-08-28 02:37:45