2013-04-28 3 views
0

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

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


} 

}

+2

Где вы снимаете знаки препинания и пробелы? – vidit

ответ

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; 
    } 
+0

Я очень ценю помощь – user2259570