读书人

分析停这个递归小程序的执行过程

发布时间: 2011-12-21 23:56:01 作者: rapoo

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

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);} 

读书人网 >J2SE开发

热点推荐