2013-04-28 45 views
0

嘿,我可以使用一點幫助,找出爲什麼我的程序不工作。問題在於使用遞歸的程序,在刪除所有標點符號和空白符後,如果給出的文本是迴文,則會計算出該文本。當程序到目前爲止編譯時,它將每個值都返回爲false。我們只允許改變isSymmetrical方法。我可以使用任何可能的幫助來弄清楚如何完成這項工作。謝謝。字符串對稱程序

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 2013-04-28 02:22:23

回答

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 2013-04-28 02:40:23