1

我此时正在课堂上学习递归,对于一项作业,我们将使用递归来计算字符串的长度,而不使用 .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;
}

}
4

4 回答 4

5

您正在执行无限递归,因为您正在传递相同的字符串。改成这样:

return stringLength(s.substring(1)) + 1;
                            //  ^
于 2013-11-05T02:38:49.890 回答
2

对于递归调用中的子字符串调用,您从索引 0 开始。我猜您打算使用索引 1。当您更改为s.substring(1)

于 2013-11-05T02:39:18.550 回答
1

可能您遇到内存或堆栈溢出 (heh) 错误;尝试

return stringLength(s.substring(1)) + 1;
于 2013-11-05T02:39:14.300 回答
0

您需要使用stringLength(s.substring(1)) + 1; .

如果使用 s.substring(0),则字符串值不会更改。这就是代码处于无限递归并因此抛出错误 java.lang.StackOverflowError 的原因。

于 2013-11-05T02:39:28.830 回答