1

我有一个关于我正在编写的基本程序的问题,说诸如racecar之类的词是否是回文。

我所有反转字符串的方法,去掉标点符号的工作,但确定它是否是回文的方法没有。

/**
* Determines if a series of letters makes a palinedrome
* 
* @param  str   All punctuation and spaces have been removed 
*               before this method is called.  
* @return true  if phrase is a palindrome,
*         false otherwise.
*/
public boolean isPalindrome(String str)
{
   String d = reverseString (str); 
   return( str.equals (reverseString (str) ) ); 

}
4

5 回答 5

6

好的,我不确定d在你的函数中服务的目的是什么,因为它从未使用过,但是,如果你想看看你的函数为什么不工作,只需添加调试代码:

public boolean isPalindrome (String str) {
    System.out.println ("DEBUG: original string = '" + str + "'");
    System.out.println ("DEBUG: reverse string = '" + reverseString (str) + "'");
    if (str.equals (reverseString (str)))
        System.out.println ("DEBUG: returning true");
    else
        System.out.println ("DEBUG: returning false");
    return str.equals (reverseString (str));
}

我敢打赌你的reverseString功能有问题(但钱不多)。这些调试语句应该足以让您找出问题所在。

于 2009-10-30T01:20:46.377 回答
5

如果string reverseString(String string), 并且所有空格都已删除,则应检查是否为回文

public boolean isPalindrome(String string)
{
    return string.equals(reverseString(string));
}

当然这是区分大小写的,所以如果您的回文定义不关心大小写,那么请改用 equalsIgnoreCase。

如果这不起作用,那么您可能需要再次检查剥离和 reverseString 方法。

于 2009-10-30T01:11:28.767 回答
0

您的问题是您没有显示的反向字符串方法。如果该方法正常工作,那么您的 isPalindrome 方法应该可以工作。您需要做的就是修复您的反向字符串方法。

Java 没有原生的反向字符串方法,我强烈建议您自己编写。

然而,Java 确实有StringBufferStringBuilder的反向方法。StringBuilder 优于 StringBuffer。

使用 equals 方法将反转的字符串与原始字符串进行比较

于 2009-10-30T05:31:45.153 回答
0

我确定您现在已经提交了作业,但是我正在学习 java 并且需要练习,所以这是我的代码。它使用 char 数组并将其反转。我认为最好的方法是使用 StringBuilder,但你的家庭作业的目的可能是学习自己做:

public class reverseString {
    public static void main(String[] args) {
        System.out.println("racecar is a palindrome: "+ isPalindrome("racecar"));
    }

    public static boolean isPalindrome(String str)
    {
       String d = reverseString (str); 
       return( str.equals (reverseString (str) ) ); 
    }

    private static char[] reverse(char[] input) {
        int length = input.length;
        char[] reversed = new char[length];
        for (int i=0;i<length;i++) {
            reversed[length-i-1]=input[i];
        }
        return reversed;
    }

    private static String reverseString(String input){
        String reversed = new String(reverse(input.toCharArray())); 
        return reversed;
    }   
}

输出:

racecar is a palindrome: true

如果有人对我的代码糟糕的原因有任何评论,请开火。我将不胜感激任何建设性的批评。

于 2013-04-05T01:34:16.863 回答
0

代码应该是这样的:

String d = reverseString (str); 
return( str.equals (d) ); 

您不必调用两次 reverseString()

PS:StringBuffer 有一个反转字符串的方法。

于 2009-10-31T20:53:48.173 回答