2014-10-07 100 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()的结果传入该方法。

你会发现一个新的错误来修复后,你这样做,但它只是一个错过!