VB .NET - Gerando números aleatórios

 Neste artigo vou apresentar os conceitos básicos relativos a geração de números aleatórios no VB .NET.

Gerar números aleatórios no Visual Basic .NET é muito simples. Para fazer o serviço usamos a classe Random.

A classe Random representa um pseudo gerador de números aleatórios que usa o Namespace : System.

System é o Namespace principal que inclui as principais definições de tipos de dados básicos : strings , arrays , eventos , exceções , etc...

O objetivo é gerar um único número aleatório entre dois números informados e também gerar números para o intervalor de números indicados.

Para tornar o código mais simples possível eu não fiz um tratamento de erros muito rigoroso.

Vamos ao projeto:

- Inicie um novo projeto no Visual Studio com as seguintes características (sinta-se a vontade para alterar a seu gosto.)

  1. Project Types : Visual Basic Projects
  2. Templates : Windows Forms
  3. Name : NumerosAleatorios
  4. Location : c:\vbnet

O layout do formulário é esta exibido ao lado.

Para atribuir um valor inicial podemos usar o evento Load do formulário:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    txtInf.Text = 1
    txtSup.Text = 100
End Sub

Para permitir somente valores números nas caixas de texto inclua no evento KeyPress de cada uma das caixas de texto txtInf.Text e txtSup.Text o código abaixo:

 Private Sub txtInf_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtInf.KeyPress
        If Not Char.IsDigit(e.KeyChar) And Not Convert.ToInt32(e.KeyChar) = Keys.Back And
   Not Convert.ToInt32(e.KeyChar) = Keys.Delete Then
            e.Handled = True
        End If
    End Sub
    Private Sub txtSup_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtSup.KeyPress
        If Not Char.IsDigit(e.KeyChar) And  Not Convert.ToInt32(e.KeyChar) = Keys.Back And
   Not Convert.ToInt32(e.KeyChar) = Keys.Delete Then
            e.Handled = True
        End If
    End Sub

O código do evento Click do botão de comando : btnGerar é o seguinte:

    Private Sub btnGerar_Click(sender As Object, e As EventArgs) Handles btnGerarNumero.Click
        If Validacao() Then
            Dim numero As Integer
            Dim GeradorDeNumerosAleatorios As Random = New Random()
            If Not String.IsNullOrEmpty(txtInf.Text) Then
                numero = GeradorDeNumerosAleatorios.Next(txtSup.Text)
            Else
                numero = GeradorDeNumerosAleatorios.Next(txtInf.Text, txtSup.Text)
            End If
            lbResultado.Items.Add(numero)
        End If
    End Sub

- Como funciona ?

  1. Primeiro eu instanciei um objeto da Classe Random - GeradorDeNumerosAleatorios
  2. A seguir usei o método Next  que retorna um número aleatório

A sintaxe usada pode ser:

1 - GeradorDeNumerosAleatorios.Next(valor) - gera um número aleatório entre 0 e  valor + 1

2-  GeradorDeNumerosAleatorios.Next(valor1 , valor2 ) - gera um número aleatório entre valor1 e valor2+1

Para gerar números entre um intervalo inclua mais um botão de comando no formulário chamado btnGerarNumeros e inclua o código abaixo no seu evento Click:

Private Sub btnGerarNumeros_Click(sender As Object, e As EventArgs) Handles btnGerarNumeros.Click
        If Validacao() Then
            Dim min As Integer = CInt(txtInf.Text)
            Dim max As Integer = CInt(txtSup.Text)
            Dim numeros(max) As Integer
            lbResultado.Items.Clear()
            For i As Integer = 0 To numeros.Length - 1
                numeros(i) = GetRandom(min, max)
                lbResultado.Items.Add(numeros(i))
            Next
        End If
    End Sub

Defina a seguir o método GetRandom() :

Public Function GetRandom(ByVal Min As Integer, ByVal Max As Integer) As Integer
        ' fazendo o Gerador static, preservamos a mesma instância
        ' assim não precisamos criar novas instância com a mesma semente 
        ' entre as chamadas
        Static Gerador As System.Random = New System.Random()
        Return Gerador.Next(Min, Max)
    End Function

Defina também o método Validacao() :

Private Function Validacao() As Boolean
        If String.IsNullOrEmpty(txtInf.Text) Or String.IsNullOrEmpty(txtSup.Text) Then
            MessageBox.Show("Informe um valor para o intervalo")
            Return False
        End If
        Dim min As Integer = CInt(txtInf.Text)
        Dim max As Integer = CInt(txtSup.Text)
        If max < min Then
            MessageBox.Show("O valor máximo deve ser maior que o valor minimo")
            Return False
        End If
        Return True
    End Function

Pegue o código completo do projeto aqui: WFVB_Random.zip

Por hoje é só isto...

Até mais

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti