Проверка, является ли строка палиндромом с помощью String.equals () - PullRequest
1 голос
/ 30 октября 2009

У меня был вопрос, касающийся основной программы, которую я писал, сказал, является ли такое слово, как гоночный автомобиль, палиндромом или нет.

Все мои методы, которые обращают строку, лишают пунктуации, но тот, который определяет, является ли это палиндромом, не делает.

/**
* 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) ) ); 

}

Ответы [ 5 ]

6 голосов
/ 30 октября 2009

Хорошо, я не уверен, для чего предназначено 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 что-то не так (но не много денег). Эти операторы отладки должны дать вам достаточно информации, чтобы понять, в чем проблема.

5 голосов
/ 30 октября 2009

Если string reverseString(String string), и все пробелы были удалены, тогда проверка того, является ли что-то палиндромом, должна быть

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

Конечно, это чувствительно к регистру, поэтому, если ваше определение палиндрома не заботится о регистре, используйте вместо него equalsIgnoreCase.

Если это не сработает, возможно, вы захотите еще раз проверить методы зачистки и reverseString.

0 голосов
/ 05 апреля 2013

Я уверен, что вы уже отправили свою домашнюю работу, но я изучаю Java и нуждаюсь в практике, поэтому вот мой код для вас. Он использует массив символов и переворачивает это. Я бы предположил, что лучшим способом было бы использовать 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

Если у кого-то есть какие-либо комментарии по поводу того, почему мой код отстой, отойдите. Буду признателен за любую конструктивную критику.

0 голосов
/ 31 октября 2009

Код должен быть таким:

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

Вам не нужно дважды вызывать reverseString ()

P.S .: StringBuffer имеет метод, который переворачивает строку.

0 голосов
/ 30 октября 2009

Ваша проблема - метод обратной строки, который вы не показали. Если этот метод работает правильно, то ваш метод isPalindrome должен работать. Все, что вам нужно сделать, это исправить ваш метод обратной строки.

Java не имеет собственного метода обратной строки, и я настоятельно рекомендую вам написать свой собственный.

Однако у Java есть обратный метод для StringBuffer и StringBuilder . StringBuilder предпочтительнее StringBuffer.

Используйте метод equals для сравнения вашей перевернутой строки с исходной строкой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...