Java - 使用递归来查找回文

时间:2015-07-08 02:11:10

标签: java

我正在设计一个以字符串作为参数的util类,如果它是回文,则返回true(例如:input:radar ---> output:true),如果不是则返回false。对于这个类,我使用的是链表,但我不知道为什么会出现错误。这是堆栈跟踪:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 4, Size: 4
    at java.util.LinkedList.checkElementIndex(LinkedList.java:555)
    at java.util.LinkedList.remove(LinkedList.java:525)
    at com.run.FindPalindromes.FindMain(FindPalindromes.java:20)
    at com.run.FindPalindromes.FindMain(FindPalindromes.java:16)
    at com.run.Test.main(Test.java:7)

以下是源代码:

public boolean FindMain(String in){
    if(times == 0){
    search = new LinkedList(cc.convertStringToArraylist(in)); 
    times ++;
    FindMain(null);
    } else {
        if(search.get(search.size()-1).equals(search.get(0))){
            search.remove(0);
            search.remove(search.size());
            FindMain(null);
        } else {
            System.out.println("Not Palindrome");
            return false;
        }
    }

    return true;

}

1 个答案:

答案 0 :(得分:3)

search.remove(search.size())应该是search.remove(search.size() - 1),因为列表是从零开始的。如果您有四个元素,则列表索引从0到3运行,因此位置4处没有任何内容。

此外,您的代码无法很好地处理空列表,因此您需要检查这些内容。