Программа симметрии струн

Эй, мне бы не помешала небольшая помощь, чтобы понять, почему моя программа не работает. Вопрос состоит в том, чтобы сделать программу, использующую рекурсию, которая определяет, является ли данный текст палиндромом или нет, после удаления всех знаков препинания и пробелов. Пока программа компилируется, она возвращает каждое значение как false. Нам разрешено изменять только метод isSсимметричный. Я мог бы использовать любую возможную помощь, пытаясь понять, как заставить это работать. Спасибо.

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));
    }


}

}


person user2259570    schedule 28.04.2013    source источник
comment
Где убрать знаки препинания и пробелы?   -  person vidit    schedule 28.04.2013


Ответы (1)


Проблема в том, что вы не включили проверку регистра, пунктуации и пробелов.

Один из способов сделать это примерно так. Детали зависят от того, что вам разрешено использовать для задания, но вы, вероятно, намереваетесь сделать что-то в этом роде.

Также обратите внимание, что 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;
  }
person Antimony    schedule 28.04.2013
comment
Я очень ценю помощь - person user2259570; 28.04.2013