School Assignment? Project Due Tomorrow? Chat LIVE With A Programming Expert!

Welcome to Dream.In.Code
Become an Expert!

Join 300,272 Programmers for FREE! Get instant access to thousands of experts, tutorials, code snippets, and more! There are 2,266 people online right now. Registration is fast and FREE... Join Now!




Non-Repeating Random Numbers

 
Reply to this topicStart new topic

> Non-Repeating Random Numbers, Or anything you want to use.

Graham
Group Icon



post 10 Jul, 2006 - 10:58 AM
Post #1


Here is a simple tutorial to help pick six non-repeating numbers or any non-repeating elements you want to use. i.e. the Alphabet.
As always we start with the Dim statements

CODE


    Dim intNumber As Integer
    Dim arrNumber(0 To 5) As Integer
    Dim i, x, y As Integer


There are only two controls needed on the form one is a Button and the other is a Label.
In the Buttons Event Procedure.is where all the code is placed to pick the random numbers and display the results in the Label.
First make sure that the Label is empty.

CODE

Label1.Text = ""


Now we need to set up a For / Next Loop to hold six numbers,

CODE

For x = 0 To 5
Next x


So, our For / Next Loop will go around six times, but without some more code it will not be very interesting.

What follows next is the code that will do the magic.
You will notice that inside our For / Next x Loop we have a nested For / Next y Loop.
This is the Loop that checks if the Random number has already been picked.
How? Well, first the random number is checked to see if it exists in our arrNumber(y), remember the tutorials on Arrays? So it looks at the first place in the array which first time the loop is entered is (0) in fact this is what the array looks like to start with.
arrNumber(0) = 0
arrNumber(1) = 0
etc
arrNumber(5) = 0
After the y Loop has finished and no numbers in the arrNumber have been found it moves on to the last bit of code inside the x For / Next Loop so that we get, assuming our first Random Number was 19 the following
arrNumber(0) = 19 once this is done off it goes again
First y Loops to see if the second Random Number has been already been picked.
Array y now looks like this
arrNumber(0) = 19
arrNumber(1) = 0
etc
arrNumber(5) = 0

If the second Random Number is 38 then as it Loops through the y Array it will not find 38, so it moves on and places 38 in the x Array (Not Medical!)
Off it goes again this time let’s say the Random Number is 19 again, as the y Loop is performed it finds 19 in arrNumber (0) position so now it uses GoTo and jumps up to Start: where it picks another Random Number to try, it keeps doing this until all six places in the Array are filled with Non-Repeating Numbers.
See the code below.

CODE

       For x = 0 To 5
Start:
            Randomize()
            intNumber = Int((49 * Rnd()) + 1
            For y = 0 To 5                
                If intNumber = arrNumber(y) Then
                    GoTo Start
                End If
            Next y

            
            arrNumber(x) = intNumber
         Next x


The last stage is to place the numbers in to the Label

CODE

        For i = 0 To 5
            Label1.Text = Label1.Text & (arrNumber(i)) & " , "
        Next


The full code is here for you to Copy (Ctrl+C) and Paste (Ctrl+V)

CODE


Public Class Form1
    ' Dimension the variables used in the programme
    Dim intNumber As Integer
    Dim arrNumber(0 To 5) As Integer
    Dim i, x, y As Integer
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        'Make sure the Label is clear
        Label1.Text = ""

        'We want a total of 6 Numbers (UK Lottery)

        For x = 0 To 5
Start:
            Randomize()
            intNumber = Int((49 * Rnd()) + 1) ' Random number 1 to 49
            For y = 0 To 5
                ' Check arrNumber (y)
                'If intnumber has already been selected,
                'Then go and select another one.
                If intNumber = arrNumber(y) Then
                    GoTo Start
                End If
            Next y

            'Place the next non-repeated number in the arrNumber(x).
            arrNumber(x) = intNumber
            
        Next x
        '----------------------------------------------------
        For i = 0 To 5
            Label1.Text = Label1.Text & (arrNumber(i)) & " , "
        Next
        
    End Sub
    
End Class


Go to the top of the page
+Quote Post


Register to Make This Ad Go Away!

5ubw0r1d
Group Icon



post 11 Jun, 2007 - 02:15 AM
Post #2
Nice tutorial, well presented. However, the goto command is a bit old-school and frowned upon by many nowadays.

Go to the top of the page
+Quote Post

westmatrix99
*



post 29 Sep, 2007 - 02:50 PM
Post #3
Not working for me, are you sure you created this in VB or VB6?

This post has been edited by westmatrix99: 29 Sep, 2007 - 02:52 PM
Go to the top of the page
+Quote Post

akhileshbc
Group Icon



post 27 Sep, 2008 - 09:33 PM
Post #4
QUOTE(westmatrix99 @ 29 Sep, 2007 - 03:50 PM) *

Not working for me, are you sure you created this in VB or VB6?

I think its .net
Go to the top of the page
+Quote Post

biggles2008
Group Icon



post 30 Apr, 2009 - 02:52 PM
Post #5
Yes this is .NET

"Label1.Text" = VB.NET

"Label1.Caption" = VB6
Go to the top of the page
+Quote Post

crepitus
Group Icon



post 22 Oct, 2009 - 12:51 AM
Post #6
A better algorithm is to place all the possible picks into a collection. Then randomly choose an index in the collection to make a selection. Then remove that item from the collection so that it cannot be selected again. This means it won't need to repeatedly try to pick an item it hasn't selected before.

vb
Module Module1

Private rand As New Random

Sub Main()
' Store the numbers 1 to 6 in a list '
Dim allNumbers As New List(Of Integer)(Enumerable.Range(1, 6))
' Store the randomly selected numbers in this list: '
Dim selectedNumbers As New List(Of Integer)
For i As Integer = 0 To 5
' A random index in numbers '
Dim index As Integer = rand.Next(0, allNumbers.Count)
' Copy the item at index from allNumbers. '
Dim selectedNumber As Integer = allNumbers(index)
' And store it in our list of picked numbers. '
selectedNumbers.Add(selectedNumber)
' Remove the item from the list so that it cannot be picked again. '
allNumbers.RemoveAt(index)
Next
' Show them on the command line '
For Each i As Integer In selectedNumbers
Console.WriteLine(i)
Next
End Sub

End Module
Go to the top of the page
+Quote Post


Fast ReplyReply to this topicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 


Lo-Fi Version Time is now: 11/7/09 11:12AM

Live Help!

Be Social

Dream.In.Code RSS Feed Dream.In.Code LinkedIn Group Follow Us On Twitter Fan Us On Facebook

Tutorials

Programming

Web Development

Reference Sheets

Code Snippets

DIC Chatroom

Bye Bye Ads

Monthly Drawing

Thumb Drive

Top Contributors

Top 10 Kudos This Month