我的目标是制作一个小的程序,该程序需要Scanner输入,并使用STACK和RECURSION来反转单词。

请注意,我知道如何制作可以执行此操作的程序。我只是无法同时使用STACK和RECURSION。

例如输入“ black is cat The”将输出“ the cat is black”

我有什么引起了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();
    }
}

最佳答案

由于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;
}

10-06 01:00