2015-02-10 117 views
0

我试图在一定数量的索引之间洗牌元素。在两个索引之间的数组中的元素随机洗牌VB.NET

Dim rng As New Random() 
For placeHolder As Integer = min To max Step -1 
      Dim swapIndex As Integer = rng.Next(min, max) 
      Dim temp As Object = myList(placeHolder) 
      myList(placeHolder) = myList(swapIndex) 
      myList(swapIndex) = temp 
Next 

其中,'min'是最低索引的值,'max'是最高索引的值。然而,每次我尝试过它似乎都没有随机洗牌(它总是按字母顺序排列)。

+0

只是为了澄清我使用ArrayList – Novastorm 2015-02-10 18:44:17

回答

0

如果min是最低的,而max是最高的,那么你的循环不应该有Step -1在里面。这将导致循环永远不会执行。

+0

这两个真的很好的答案 - 对于我的代码Ross的解决方案效果更好。一旦步骤-1被删除,它就开始执行 – Novastorm 2015-02-10 19:10:21

1

试试这个:

Dim rng As New Random() 
For placeHolder as Integer = min To max-1 Step 1 
    Dim swapIndex as Integer = rng.Next(placeHolder +1, max) 
    Dim temp as Object = myList(placeHolder) 
    myList(placeHolder) = myList(swapIndex) 
    myList(swapIndex) = temp 
Next 

的变化? 我改变了最大值,比最后一步减少了一点,这样你就不用浪费时间试图把自己换掉了。我也将步骤更改为+1,因为您的描述中最大为最小<。我将最小随机值更改为占位符+ 1,因为我不想重新交换已交换的内容。尽管如此,最后的更改是可选的