-1
我已閱讀了有關「如何在數組中找到最低值」的幾個答案。這似乎很簡單,但實施它時,我發現約有10%的時間出現錯誤,其中被確定爲具有最低值的指數沒有最低。在C++ int數組中找到最小值會導致間歇性錯誤?
變量m_siaValue [6] [4]是一個短整數的二維數組,其中所有位置都填充了1到6之間的隨機值。第一個維包含6行(索引0-5),而第二維標識4列(索引0-3)。
變量m_siaIndexOfLowest [6]是一個短整型數組,其索引與m_siaValue [6] [4]數組中的行對應。此數組的值旨在保存m_siaValue每行中最低值單元格(列)的索引。
看起來這麼短暫和簡單,我感到困惑它失敗。但更重要的是,它只能失敗10%的時間。任何人都可以看到什麼可能是錯的?
for (short siX= 0;siX < 6; siX++) {
// Assign cell/column 0 as lowest. Then loop through the other 3,
// comparing and reassigning if other cells are lower.
m_siaIndexOfLowest[siX] = 0;
for (short siY = 1;siY < 4; siY++) {
if (m_siaValue[siX][siY] < m_siaValue[siX][siY-1]) {
m_siaIndexOfLowest[siX] = siY;
}
}
}
輸出顯示錯誤。總計是在此代碼之後立即計算的,在通過從行總和中減去所標識的最低值來顯示或移動數據之前。因此,總的確認錯誤在於確定最低位置,而不是放置或着色單元格。
使用正確的工具來解決這些問題是你的調試器。在*堆棧溢出問題之前,您應該逐行執行您的代碼。如需更多幫助,請閱讀[如何調試小程序(由Eric Lippert撰寫)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您應該\編輯您的問題,以包含一個[最小,完整和可驗證](http://stackoverflow.com/help/mcve)示例,該示例再現了您的問題,以及您在調試器。 –
一個比調試器更好的工具:寫下'3 2 4 3'並手工執行你的算法:「是2小於3?它是,所以丟棄舊的索引並保持1.是4小於2?否,所以保留1.是3小於4?它是,所以丟棄舊的索引並保留3.我們已經到了最後,所以3是最小元素的索引。WTF ?!「 – molbdnilo