2016-11-21 73 views
-1

中的內容我想洗牌當前包含一個列表框內的數字。重新排列的數字列表框

但是得到一個錯誤與我的索引

我能夠有一個數組要做到這一點,但我現在想在不使用任何容器或陣列的洗牌,但這樣做有問題等等。

this.index = 0; 
int a = Convert.ToInt32(lstHoldValue.Items.Count); 
lstHoldValue.Items.Clear(); 

for (int i = 0; i < a; i++) 
{ 
    int idx = rnd.Next(i, a); 

    //swap elements 
    int tmp = Convert.ToInt32(lstHoldValue.Items[i]); 

    (lstHoldValue.Items[i]) = Convert.ToInt32(lstHoldValue.Items[idx]); 
    (lstHoldValue.Items[idx]) = Convert.ToInt32(tmp); 
    lstHoldValue.Items.Add("\t" + Convert.ToInt32(lstHoldValue.Items[i]));//show array in a listbox      

} 
+0

你得到列表中的項目的金額,那麼你清除列表。所以這也讓你第一次拿到的時間錯誤的99%量的效果。 – Sayse

+0

謝謝,但它似乎重複數字第二次,當我拿出明確 –

+0

這是因爲添加到列表行...真的,你需要複製一份清單工作,然後修改該副本爲期望則榜上無名使用 – Sayse

回答

0

this.index = 0; //這是什麼呢?

int a = listHoldValue.Count; //計數默認返回一個整數

// lstHoldValue.Items.Clear(); //刪除此行,它會清除}存儲

for (int i = 0; i < a; i++) 
{ 
    int idx = rnd.Next(i, a); 

//swap elements 


int tmp = Convert.ToInt32(lstHoldValue.Items[i]); 
     lstHoldVAlue.Items.Insert(i,lstHoldValue.Items[idx]); 
    (lstHoldValue.Items[i]) = Convert.ToInt32(lstHoldValue.Items[idx]); 
    (lstHoldValue.Items.Insert(idx,temp); 
lstHoldValue.Items.Add("\t" + Convert.ToInt32(lstHoldValue.Items[i]));//this line is redundant because you have already added item[i] at index [idx] 

項目