Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
• Status: Solved
• Priority: Medium
• Security: Public
• Views: 1207

# Random numbers in an array in VBScript

In vbscript, I need a function that will fill an array with random numbers but not repeating.  For instance, if I have 9 numbers, the numbers in the array need to be from 1 to 10.  Example:

Trial #1: 4,1,6,3,9,8,2,5,7
Trail #2: 9,3,1,4,5,7,2,6,8
...
0
onemorecoke
1 Solution

Commented:
I would use the dictionary object so that you can check if the number has already been added to the array.  Here is some sample code for you.  Now a slight warning - this is based of a random number generator.  It could "get stuck" running in the loop until it randomly generates a missing number.

``````Option Explicit
Dim dicNum, i, blnAdded, intNum, myvalue, strMsg

Set dicNum = CreateObject("Scripting.Dictionary")

For i = 0 to 9
intNum = Cint(Rnd()*10)
intNum = Cint(Rnd()*10)
If not dicNum.Exists(intNum) Then
End If
Loop
Next

For each myvalue in dicNum.Items
strMsg = strMsg & " : " & myvalue
Next

msgbox strMsg
``````
0

Middle School Assistant TeacherCommented:
...or you can just FILL the array with 1 to 10. then SHUFFLE it by swapping random indices.
0

Commented:
Interesting puzzle!

Here's my go.  Once it uses a number from 1 to 10, it removes that number so it cannot be chosen again.

Regards,
Daz.
``````Option Explicit

Dim arrTrial(10), strTrial, dicNums, i, arrNums, iNum

Randomize
Set dicNums = CreateObject("Scripting.Dictionary")

'# Load dictionary with 1 to 10
For i = 1 to 10
dicNums(i) = i
Next

'# Load arrTrial array with random elements from dictionary, removing the element from the dictionary whenever it is used
Do
i = dicNums.Count
arrNums = dicNums.Keys
iNum = Int(Rnd()*i + 1) - 1
arrTrial(i - 1) = arrNums(iNum)
dicNums.Remove(arrNums(iNum))
If dicNums.Count <1 Then Exit Do
Loop

'#  Test the array

strTrial = Join(arrTrial, " ")

MsgBox "arrTrial = " & strTrial
``````
0

## Featured Post

Tackle projects and never again get stuck behind a technical roadblock.