我的目标是制作一个小的程序,该程序需要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;
}