1 回答

TA贡献2036条经验 获得超8个赞
当您说Nodemin = Nodemin.getNext();时,您将要交换的项目(所选项目)指向超出最小值的位置。这有一个不需要的副作用,当您进行交换时,您在列表中稍后放置的数字将超出您正在交换的数字,我相信。
但是在设置 Nodemin 的值时存在一个更微妙的缺陷,因为您一直在列表中查找较低的数字。因为 Nodemin 指向一个特定的位置,所以每次找到一个新的最低元素时,您不仅会更改 Nodemin 的值,还会更改列表中某个项目的值,因为它们指向同一个位置。
我认为您可以通过将 Nodemin 更改为两个独立的东西来解决这两个问题,每个东西都可以满足您的需求。
让 minValue 像你的温度一样,只跟踪 minValue。让 minLocation 始终指向 minValue 所在的位置(永远不要在其上执行下一行,只需将其重置为找到新最小值的位置)。
然后,当在内部 for 循环之外进行交换时,在 minLocation 指向的位置进行交换,并使用值 minValue。
那应该解决它。或者它也应该可以替换
if(temp.compareTo(node2.getValue()) > 0)
{
Nodemin.setValue(node2.getValue());
}
Nodemin = Nodemin.getNext();
和
if(temp.compareTo(node2.getValue()) > 0)
{
Nodemin = node2;
}
跟踪和调试的建议是好的。你会看到我所说的证据,我相信,并发现我犯的任何错误。
添加回答
举报