最近再完成一个棋类游戏的项目。其中悔棋的功能卡住了我半天,原理都懂,就是利用栈的回退功能。可是我回退了之后发现和没回退没什么两样。。。
我使用一个List来保存棋子的坐标,每走一步之前都把List压入栈。出了问题之后,调试出来的结果让我大吃一惊,栈里面的东西都是一样。后来想明白了,可以这样理解为栈保存的是List的地址(当然这样理解有错误),可是List的地址从来没有变过,因此每次回退得到的数据都是一样的。 明白错误的原因之后,解决方法就很简单了。在一个定义域内声明一个List,然后将全局List的内容一个一个的传给域内的List(不能简单的=),然后再把这个域内的List压入栈。随着定义域的失效,List也就没有了,但是栈中还存在着。这样会退的时候只需要 List=栈.pop()就可以了。