我想你首先要把OO和递归搞清。你的TryHandle类有两个字段,char型的c和TryHandle
型(注意)的next!而next又是一个 TryHandle,它又有c和next!......知道链表吗?
6 TryHandle
c = a
next ---->TryHandle
5 c = b
next ---->TryHandle
4 c = c
next ---->TryHandle
3 c = d
next---> TryHandle
2 c = e
next--->TryHandle
1 c = d
next=null
上面是你在main方法创建的TryHandle类的对象t的示意图。你可看到每个
next都引用到不同的TryHandle实例!后面的聚合为前面的TryHandle实例。
你可在Forte for Java 4.0等IDE中调试,清楚地看到Call stack!
在执行main方法中的System.out.println("t="+t);时,
调用t.toString()方法(请仔细研究,用到递归)。
为什么会输出t=:a:b:c:d:e:f呢?!看上图和toSring()方法!
t的c字段为a,s这时就为:a;next引用到一个TryHandle实例(我假称为next5),next
当然非空,于是就递归,执行next5.toString()! next5的字段c为b,s现在就为:a:b!
它的字段next又引用到一个TryHandle实例,非空,于是就递归......一直到next1
(假称),把:f连上,s就成为:a:b:c:d:e:f了,next这时为null,
不再递归,回溯,执行完毕!
有任何意见,续贴或 [email protected]们相似。
型(注意)的next!而next又是一个 TryHandle,它又有c和next!......知道链表吗?
6 TryHandle
c = a
next ---->TryHandle
5 c = b
next ---->TryHandle
4 c = c
next ---->TryHandle
3 c = d
next---> TryHandle
2 c = e
next--->TryHandle
1 c = d
next=null
上面是你在main方法创建的TryHandle类的对象t的示意图。你可看到每个
next都引用到不同的TryHandle实例!后面的聚合为前面的TryHandle实例。
你可在Forte for Java 4.0等IDE中调试,清楚地看到Call stack!
在执行main方法中的System.out.println("t="+t);时,
调用t.toString()方法(请仔细研究,用到递归)。
为什么会输出t=:a:b:c:d:e:f呢?!看上图和toSring()方法!
t的c字段为a,s这时就为:a;next引用到一个TryHandle实例(我假称为next5),next
当然非空,于是就递归,执行next5.toString()! next5的字段c为b,s现在就为:a:b!
它的字段next又引用到一个TryHandle实例,非空,于是就递归......一直到next1
(假称),把:f连上,s就成为:a:b:c:d:e:f了,next这时为null,
不再递归,回溯,执行完毕!
有任何意见,续贴或 [email protected]们相似。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货