在lab2中,当我运行FriendshipGraph的测试文件时,提示我不通过
提示我结果为-1
把前一行注释掉并设置断点,进行debug
发现当返回dis时,dis的结果是1
经过分析后发现,每调用一次getDistance(Person sta,Person end)方法,在执行广度优先算法时,会把一些成员标记为访问过,而当调用结束后却没有把所有成员重新标记为为访问过,因此上一次对getDistance(Person sta,Person end)的调用会影响下一次调用的结果。
解决方法是当方法返回前,把所有成员的标记重置为未访问过。
其实并不是什么复杂的东西,但是有让我思考的地方:
我的getDistance(Person sta,Person end)方法单看内部实现没什么问题,但是一个方法的正确与否并不仅仅局限于其内部逻辑本身,还应考虑方法与方法间的关系。当连续调用多次getDistance(Person sta,Person end)方法时,如果不考虑调用的方法之间的关系,没有把每个成员的标记重置,即使方法内部代码的逻辑完全正确,程序也是错误的。