1 回答

TA貢獻2036條經(jīng)驗 獲得超8個贊
當您說Nodemin = Nodemin.getNext();時,您將要交換的項目(所選項目)指向超出最小值的位置。這有一個不需要的副作用,當您進行交換時,您在列表中稍后放置的數(shù)字將超出您正在交換的數(shù)字,我相信。
但是在設(shè)置 Nodemin 的值時存在一個更微妙的缺陷,因為您一直在列表中查找較低的數(shù)字。因為 Nodemin 指向一個特定的位置,所以每次找到一個新的最低元素時,您不僅會更改 Nodemin 的值,還會更改列表中某個項目的值,因為它們指向同一個位置。
我認為您可以通過將 Nodemin 更改為兩個獨立的東西來解決這兩個問題,每個東西都可以滿足您的需求。
讓 minValue 像你的溫度一樣,只跟蹤 minValue。讓 minLocation 始終指向 minValue 所在的位置(永遠不要在其上執(zhí)行下一行,只需將其重置為找到新最小值的位置)。
然后,當在內(nèi)部 for 循環(huán)之外進行交換時,在 minLocation 指向的位置進行交換,并使用值 minValue。
那應(yīng)該解決它?;蛘咚矐?yīng)該可以替換
if(temp.compareTo(node2.getValue()) > 0)
{
Nodemin.setValue(node2.getValue());
}
Nodemin = Nodemin.getNext();
和
if(temp.compareTo(node2.getValue()) > 0)
{
Nodemin = node2;
}
跟蹤和調(diào)試的建議是好的。你會看到我所說的證據(jù),我相信,并發(fā)現(xiàn)我犯的任何錯誤。
添加回答
舉報