递归StackOverflowError

时间:2014-01-15 01:54:48

标签: java recursion stack stack-overflow

我的目标是创建一个小程序,它接受扫描仪输入并使用STACK和RECURSION来反转单词。

请注意我知道如何制作可以执行此操作的程序。我只是在使用STACK和RECURSION进行一项工作时遇到了麻烦。

例如输入"黑色是cat"将输出"猫是黑色"

我所得到的是StackOverflowError,其中注释行显示。

如何解决这个问题或者做得更好的任何想法都将不胜感激。

import java.util.*;

public class Reverse
{

    public static String wordReverse(String[] theWords) {


       Stack <String> stacker = new Stack <String>();

       for(String wordsHold : theWords) {
            stacker.push(wordsHold);
        } 

        while ( !stacker.empty() ){
               stacker.pop();
        }       

        return wordReverse(theWords);  // Cause of StackOverflowError
        } 

    public static void main(String args[])

    {

        Scanner takeIn = new Scanner(System.in);

        String allWords = takeIn.nextLine();

        String[] goodWords = allWords.split(" ");

        System.out.println(wordReverse(goodWords)); 

        takeIn.close(); 
    }
}

1 个答案:

答案 0 :(得分:1)

由于wordReverse()始终调用wordReverse(theWords),递归永远不会结束。这将导致程序堆栈溢出。它与stacker变量无关。您的无限递归方法恰好使用Stack<>类,这简直巧合。

您可以考虑实施wordReverse()这样的

public static String wordReverse(String[] theWords) {

    Stack<String> stacker = new Stack<String>();

    for (String wordsHold : theWords) {
        stacker.push(wordsHold);
    }

    String ret = "";
    while (!stacker.empty()) {
        ret = ret + stacker.pop();
    }

    return ret;
}