2016-11-21 75 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] 

项目