日期:2014-05-20  浏览次数:20827 次

分析下这个递归小程序的执行过程
我自己编写的一个递归小新程序,逆序打印一个字符串.源码如下:

public class Recursion {
public static String writeBackWard(String s) {
String temp=new String("");
if (s.length() != 0) {
temp += s.substring(s.length()-1);
s = s.substring(0,s.length()-2);
writeBackWard(s);

return temp;
}

public static void main(String[] args) {
Recursion recur = new Recursion();
System.out.println(recur.writeBackWard("hello"));
}
}

我自认为应该没错了,但是在调试的时候,始终说我的数组下标有问题,谁帮我分下下,到底是哪儿出问题了.谢谢了.

E:\>java Recursion
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String ind
ex out of range: -1
  at java.lang.String.substring(Unknown Source)
  at Recursion.writeBackWard(Recursion.java:8)
  at Recursion.writeBackWard(Recursion.java:9)
  at Recursion.writeBackWard(Recursion.java:9)
  at Recursion.main(Recursion.java:16)

E:\>

------解决方案--------------------
Java code

if (s.length() != 0) {//问题在这,你的条件是当s的长度不为零时进入下面的代码
    temp += s.substring(s.length()-1);//这里是没有问题
    s = s.substring(0,s.length()-2);//但是这里,当s的长度为1时,这里就是 s = s.substring( 0, -1)了,当然会错了
    writeBackWard(s);
}