我的目标是创建一个小程序,它接受扫描仪输入并使用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();
}
}
答案 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;
}