StackOverflow错误

时间:2017-06-15 15:30:53

标签: java recursion stack-overflow palindrome

我正在编写这个程序,以检查用户输入的单词是否是回文(当拼写向后时,该单词读取相同的单词)。我正在使用递归,正如我给出的任务所述。显然我的递归调用是正确的,因为参数每次都在变化。然而,我收到了StackOverflow错误。我无法确定错误的原因。有什么问题?

import java.util.Scanner;

public class PalindromeChecker {

    static StringBuffer mainString, tempString, chString;
    static int j = 0;

    public static void main(String[] args){

        Scanner input = new Scanner(System.in);
        System.out.println("Please input the String:");
        mainString = new StringBuffer(input.nextLine());
        tempString = mainString;

        for(int n = 0; n < tempString.length(); n++){
            if(tempString.charAt(n) == ' '){
                tempString.deleteCharAt(n);
                n -= 1;
            }
        }
        chString = tempString;
        tempString.reverse();
        checker(j);

    }


    public static void checker(int k){

        if(k < tempString.length()){
            if(tempString.charAt(k) != chString.charAt(k)){
                System.out.println("Not a Palindrome");

            }
            else
                checker(j+1);
        }
        else
            System.out.println("Palindrome Confirmed!");

    } 

}

3 个答案:

答案 0 :(得分:2)

从我看到你永远不会改变你的j。所以每次调用j = 1都会调用。

编辑:StackOverFlowError原因通常是因为你陷入了循环。

答案 1 :(得分:0)

您的问题始于您将所有变量声明为checker(j+1);。因此,从您的所有代码中都可以看到它们,并且您的所有代码都可能意外地访问它们并对其进行修改。

然后您的问题仍在继续调用checker(k+1);,而您可能需要执行j,静态变量0j+1并且永远不会更改,因此{{1} }将永远是1。所以,你的功能总是递归。

答案 2 :(得分:0)

J + 1表示:(变量j的值)+ 1。 ++ J或J ++表示将一个加到变量j。

这里的区别在于,当你执行j + 1时,你永远不会为变量J赋予新值。

因此,如果您需要先增加j,请执行以下操作:检查器(++ j) j将递增,然后传递给检查器方法

如果你需要传递j然后增加它: checker(j ++)。 j将传递给checker方法然后递增