2014-10-07 70 views
1

問題:我的迴文有什麼問題?

  1. 開發一個遞歸算法來確定迴文是否隱藏在較長的單詞或短語中。迴文是從左到右讀取時具有相同字母序列並且從右向左讀取時忽略空格(例如,Some like cake, but I prefer pie包含迴文I prefer pi)的字或短語。

下面是我的代碼:

public class e125 { 
    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     int i = 0; 
     String sLine = "Some like cake, but I prefer pie"; 
     sLine.replaceAll("\\s+", ""); 
     System.out.println(PlainRet(sLine, i)); 
    } 

    public static String PlainRet(String sLine, int i) { 
     int nNum; 
     char c = 0; 
     String sPlain = ""; 
     if (i >= sLine.length()) { 
      return "No Plaindrome"; 
     } 
     c = sLine.charAt(i); 
     nNum = Isgood(sLine, c, i); 
     if (nNum != 0) { 
      for (; i < nNum; i++) { 
       sPlain += sLine.charAt(i); 
      } 
      return sPlain; 
     } 
     return PlainRet(sLine, i + 1); 
    } 

    public static int Isgood(String sLine, char c, int i) { 
     for (int j = i + 1; j < sLine.length(); j++) { 
      if (Character.toUpperCase(sLine.charAt(j)) == Character.toUpperCase(c)) { 
       if (Isplain(sLine, i, j)) { 
        return j; 
       } 
      } 
     } 
     return 0; 
    } 

    public static boolean Isplain(String sLine, int i, int j) { 
     if (Character.toUpperCase(sLine.charAt(j)) != Character.toUpperCase(sLine.charAt(i))) { 
      return false; 
     } 
     else if (i == j || j == i + 1) { 
      return true; 
     } 
     return (Isplain(sLine, i + 1, j - 1)); 
    } 
} 

我不斷收到的輸出 「I」

我不知道什麼是錯的。

+5

歡迎來到編程。作爲程序員,我們的日常工作是尋找爲什麼某些代碼不能按照我們的想法或願望行事。在代碼中添加跟蹤('System.out.println'),或者更好地,使用調試器逐行執行代碼並檢查每個步驟中變量的值,以診斷問題。 – 2014-10-07 16:35:31

+4

'字符串'是不可變的。 '.replaceAll()'用替換項創建一個新的'String',所以你真的想'sLine = sLine.replaceAll(...);' – FatalError 2014-10-07 16:36:38

+0

單個字符短語在定義上是它自己的迴文,因爲它是一樣的兩個方向。你的代碼需要明確地需要2+個字符,因爲適當的迴文不能更短。 – 2014-10-07 16:36:46

回答

0

FatalError評論sLine.replaceAll()返回新的String。您需要重新分配sLine或將replaceAll()的結果傳入該方法。

你會發現一個新的錯誤來修復後,你這樣做,但它只是一個錯過!