2013-04-28 6 views
0

왜 내 프로그램이 작동하지 않는지 알아 내려고 약간의 도움을받을 수 있습니다. 질문은 모든 구두점과 공백이 제거 된 후 주어진 텍스트가 회문인지 아닌지를 나타내는 재귀를 사용하여 프로그램을 작성하는 것입니다. 지금까지 컴파일 된 프로그램은 모든 값을 false로 반환합니다. isSymmetrical 메소드 만 변경할 수 있습니다. 이 작업을 수행하는 방법을 알아 내려고 가능한 모든 도움을 사용할 수 있습니다. 고맙습니다.String 대칭 프로그램

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