【发布时间】:2013-11-15 20:33:15
【问题描述】:
我此时正在课堂上学习递归,对于一项作业,我们将使用递归来计算字符串的长度,而不使用 .getLength 或类似的东西。这是我尝试过的,但到目前为止我在第 20 行遇到错误并且很困惑。
import java.util.Scanner;
public class StringCounter {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner kb = new Scanner(System.in);
System.out.println("Enter a String: ");
String s = kb.nextLine();
System.out.println("The length of your string is: " + stringLength(s));
}
public static int stringLength(String s) {
if (s.equals(""))
return 0;
else
return stringLength(s.substring(0)) + 1;
}
}
【问题讨论】:
-
什么样的错误?哪一行是 20?
-
StringCounter.stringLength(StringCounter.java:18) 的 StringCounter.stringLength(StringCounter.java) 的 java.lang.String.equals(Unknown Source) 的线程“main”java.lang.StackOverflowError 异常:21) 18 是 if 语句,21 是 else
-
s.substring(0)返回s... 所以你得到一个StackOverflow错误,因为你在堆栈上放了无数次对stringLength的调用,因为你一直用同样的事情一遍又一遍,s.equals("")永远不会返回true。 -
您的递归函数回答自己的次数比预期的要多,并且内存不足。