Solved

# How do you randomly shuffle an array

Posted on 2004-08-24
341 Views
Suppose I was working with the following array, how would I randomly rearrange the order?
I am woking with VB.NET code.

Dim MyArray(4) as Integer
MyArray(0) = 6546
MyArray(1) = 6547
MyArray(2) = 6548
MyArray(3) = 6549
MyArray(4) = 6550

Cheers
0
Question by:pgilfeather

Expert Comment

Here are some links with different algorithms you can try:

http://www.vb-helper.com/howto_randomize_array.html
http://www.freevbcode.com/ShowCode.asp?ID=1174
http://www.mvps.org/vb/hardcore/html/shuffling.htm

I don't know which is the best, but I hope this is somewhat helpful.
0

LVL 55

Expert Comment

Duplicated question?

Dim arraySize, j as Integer
Dim temp as Integer   ' Must be the same type as array elements

arraySize = UBound(MyArray) - LBound(MyArray) + 1
For i = LBound(MyArray) To UBound(MyArray)
j = Int(arraySize * Rnd)
temp = MyArray(i)
MyArray(i) = MyArray(j)
MyArray(j) = temp
Next i
0

LVL 55

Expert Comment

Oops! Detected some bug:

j = Int((arraySize-1) * Rnd)+LBound(MyArray)

0

Author Comment

Thanks for that guys!

jaime olivares,

I have this so far that when you click a button a listbox shows the numbers in the array. How do I set up your code to work with my array?

Whenever I get code from this site it never seems to be runnable code and being a beginner like me this gets frustrating. You can probaly tell from my code that I've just been introduced to the concept of arrays.

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim MyArray(4) As Integer
MyArray(0) = 6546
MyArray(1) = 6547
MyArray(2) = 6548
MyArray(3) = 6549
MyArray(4) = 6550
lstNumbers.DataSource = MyArray
lstNumbers.DataBind()
End Sub
0

LVL 55

Accepted Solution

Jaime Olivares earned 500 total points
Currently do you see your ordered array?
If so just merge my code with yours:

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim MyArray(4) As Integer
Dim arraySize, j as Integer
Dim temp as Integer   ' Must be the same type as array elements

MyArray(0) = 6546
MyArray(1) = 6547
MyArray(2) = 6548
MyArray(3) = 6549
MyArray(4) = 6550

arraySize = UBound(MyArray) - LBound(MyArray) + 1
For i = LBound(MyArray) To UBound(MyArray)
j = Int(arraySize * Rnd)
temp = MyArray(i)
MyArray(i) = MyArray(j)
MyArray(j) = temp
Next i

lstNumbers.DataSource = MyArray
lstNumbers.DataBind()
End Sub

If you have any error while compiling, please tell.
0

Author Comment

Thanks that worked!

You forgot to dim 'arraySize' and 'i' but nevertheless you've earned yourself 500 points.

I don't fully understand how this works but I'm glad it does.

Cheers
0

LVL 55

Expert Comment

Thanks for the points, just forgot to Dim the i   ;-)

How it works, it is quiet simple:
The for loop scans for every element in the array, it select a random element in the array and swaps it with the current element.

0

Author Comment

Cheers.

Look out for my followup question because I'll no doubt run into further problems.

Thanks again!
0

LVL 84

Expert Comment

j = Int(arraySize * Rnd)
does not produce a fair shuffle
j = Int(i* Rnd)
is better
0

## Featured Post

### Suggested Solutions

word0 challenge 4 52
wordmultiple challenge 12 87
How  do I get an older program to run in Windows 10? 20 79
groovy example issue 10 65
A short article about problems I had with the new location API and permissions in Marshmallow
In this post we will learn how to connect and configure Android Device (Smartphone etc.) with Android Studio. After that we will run a simple Hello World Program.
In this fourth video of the Xpdf series, we discuss and demonstrate the PDFinfo utility, which retrieves the contents of a PDF's Info Dictionary, as well as some other information, including the page count. We show how to isolate the page count in a…
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…