更新:
这里引起了一些随机路径的输出我相信:
if(openlist[x][y]!=1){
if(min>copy[x][y]){
min=copy[x][y];
holdx = x;
holdy = y;
}
}
我相信在某些点上,当我的最短路径比另一条路径大时,它会测试每条路径(并输出它)。我该如何解决这个问题?
答案 0 :(得分:1)
通过查看您的代码我可以看到的是,您没有正确地维护您的状态。
您有一个名为moveToPosition()
的方法,但每个节点都会调用它 - 您最终会将每个x/y
组合添加到paths
List
。
说实话,很多事情没有意义,我认为你有不止一个问题。还有很多糟糕的编程技术会让你失去标记:
如果我是你,我会尝试完成你的教授榜样。它将教你OO设计中一些体面的可转移技能。我会忽略整个文件的读写。只需在方法中模拟一个快速的Node [3] [3]迷宫,然后将其传递给初始方法。您还需要跟踪您是否已经访问过某个节点,但这应该很容易。
抱歉,我无法提供更多帮助 - 我的解决方案与你的教授非常相似,你会发现同样难以理解,而且我反对为某人做功课 - 一个人不能这样学习,而且编程非常一旦你克服了最初的困难,你就会感到愉快。
一切顺利
作为设置StackOverflowError
时size > 100
的解决方案,您需要增加stack
的尺寸。
要增加堆栈大小,请使用Java VM
参数-Xss
并将其设置为大于默认值的值。
-Xss64M
应该做到这一点。
作为一种解释,随着你增加size
param,你也增加了你正在进行的递归量,这意味着将越来越多的方法调用放到stack
上(如下所示)抛出错误时打印的非常长的堆栈)。要通过这么多递归继续使用您的应用程序,您需要增加堆栈的大小。
有关详细信息,请参阅此SO question。
答案 1 :(得分:0)
当你得到一个真实的" StackOverflow错误,这意味着您的堆栈有太多的嵌套框架让JVM觉得它正在取得进展。
要解决这个问题,你可以调整你的JVM,但那是一场失败的游戏。总会有一些东西需要更多的调整,调整将调整JVM以适应更小的迷宫。
要真正解决问题,您需要保留一组状态,有效地将存储在堆栈中的信息推送到堆中。与堆栈不同,堆没有堆栈帧,因此您无法将它们嵌套得太深。你仍然会冒着内存不足异常的风险(如果你填满你的堆),但这可能会发生得更晚(并且有更大的迷宫)。