Ir para o conteúdo
pedrologin

Repetição de numeros aleatorios

Mensagens Recomendadas

pedrologin

Ola a todos, sou novo no forum e no visual basic.

Estou a fazer um trabalho, no qual tenho alguns problemas na sua concretização.

Um gerador de numeros, colocados por ordem crescente e sem repetiçoes. Este ultimo me está quebrar a cabeça, ja faz uma semana que procuro solução sem susseço, pois não consigo fazer com que não sejam colocadas nas textbox numeros repetidos.

Se por acaso eu tenho algum codigo mal agradeço a boa vontade de me corrigir.

Eis aqui o trabalho que consegui ate agora.

Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        If RadioButton1.Checked Then

            'Numeros
            Dim n1 As Integer = 0
            Dim rnd1 As New System.Random
            n1 = rnd1.Next((1), 50) * Rnd() + 0.1

            Dim n2 As Integer = 0
            Dim rnd2 As New System.Random
            n2 = rnd2.Next((1), 50) * Rnd() + 0.1

            Dim n3 As Integer = 0
            Dim rnd3 As New System.Random
            n3 = rnd3.Next((1), 50) * Rnd() + 0.1

            Dim n4 As Integer = 0
            Dim rnd4 As New System.Random
            n4 = rnd4.Next((1), 50) * Rnd() + 0.1

            Dim n5 As Integer = 0
            Dim rnd5 As New System.Random
            n5 = rnd5.Next((1), 50) * Rnd() + 0.1

            Dim pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0, pos5 = 0, p1 As String
            Dim numList1(4) As Integer

            numList1(0) = n1
            numList1(1) = n2
            numList1(2) = n3
            numList1(3) = n4
            numList1(4) = n5

            Array.Sort(numList1)
            For Each num As Integer In numList1
                Debug.WriteLine(num)

                pos1 = numList1(0)
                pos2 = numList1(1)
                pos3 = numList1(2)
                pos4 = numList1(3)
                pos5 = numList1(4)

                TextBox1.Text = pos1
                TextBox2.Text = pos2
                TextBox3.Text = pos3
                TextBox4.Text = pos4
                TextBox5.Text = pos5

            Next

            If RadioButton1.Checked Then

                Dim pos6 = 0, pos7 = 0, p2 As String
                Dim numList2(1) As Integer

                'Estrelas
                Dim n6 As Integer = 0
                Dim rnd6 As New System.Random
                n6 = rnd6.Next((1), 11) * Rnd() + 0.1

                Dim n7 As Integer = 0
                Dim rnd7 As New System.Random
                n7 = rnd7.Next((1), 11) * Rnd() + 0.1

                numList2(0) = n6
                numList2(1) = n7

                Array.Sort(numList2)
                For Each num As Integer In numList2
                    Debug.WriteLine(num)

                    pos6 = numList2(0)
                    pos7 = numList2(1)
                    TextBox6.Text = pos6
                    TextBox7.Text = pos7

                Next
            End If
        End If
    End Sub
End Class

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jpaulino

Crias um List(Of T) (por exemplo) e depois geras um número e verificas se já está na lista ou não. Se não estiver, adicionas, se estiver, crias um novo.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Experimenta assim:

em vez de criares números à toa e depois ordenares

cria números mais pequenos (maiores ou iguais a 1) e vais somando ao último


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedrologin

jpaulino, seria possivel fazer um exemplo utilizando o meu codigo, é que isso que me diz ainda é muita areia para o meu camião...

Comecei a programar à 1 mês e ainda tenho pouco conhecimento, tanto que demorei quase uma semana pra fazer este que apresentei aqui.  :thumbsup:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jpaulino

Podes fazer algo como isto, que te gera 5 números entre 1 e 100:

        Dim rnd As New Random()
        Dim list As New List(Of Integer)

        While list.Count <> 5

            ' Gera o número aleatório
            Dim num As Integer = rnd.Next(1, 100)

            ' Caso não esteja na lista, adiciona-o
            If Not list.Contains(num) Then list.Add(num)

        End While

        ' Ordena os resultados   
        list.Sort()

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedrologin

Ola jpaulino

Obrigadissimo pela ajuda ja consegui fazer o trabalho, incrivel como meia duzia de codigos resolvem o problema.

Mas voltei a encalhar noutro, "numeros aleatorios multiplos"

Estou a utilizar 2 combobox, uma para as estrelas de 1 a 11 e outra para os numeros de 5 a 11, como faço agora quantidade de numeros e estrelas pedidos pelo utilizador?

'**********Aposta multipla***********

        'Gerador de 5 a 11 numeros aleatorios sem repetições e ordenados
        If RadioButton2.Checked Then
            'adiciona a comb o valor selecionado na Combobox
            
                Dim rnd3 As New Random()
                Dim list3 As New List(Of Integer)
            Dim nume1 As String

                While list3.Count <> 5

                    ' Gera o número aleatório
                    Dim num As Integer = rnd3.Next(1, 50)

                    ' Caso não esteja na lista, adiciona-o
                    If Not list3.Contains(num) Then list3.Add(num)

                End While

                ' Ordena os resultados   
            list3.Sort()
            nume1 = list3(0) & (" - ") & list3(1) & (" - ") & list3(2) & (" - ") & list3(3) & (" - ") & list3(4)
            TextBox8.Text = nume1



            'Gerador de 5 a 11 numeros aleatorios sem repetições e ordenados
            If RadioButton2.Checked Then
                'adiciona a comb o valor selecionado na Combobox

                Dim rnd4 As New Random()
                Dim list4 As New List(Of Integer)
                Dim estr1 As String

                While list4.Count <> 5

                    ' Gera o número aleatório
                    Dim num As Integer = rnd3.Next(1, 11)

                    ' Caso não esteja na lista, adiciona-o
                    If Not list4.Contains(num) Then list4.Add(num)

                End While

                ' Ordena os resultados   
                list4.Sort()
                estr1 = list4(0) & (" - ") & list4(1) & (" - ") & list4(2) & (" - ") & list4(3) & (" - ") & list4(4)
                TextBox9.Text = estr1

            End If
        End If
    End Sub

    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        If MessageBox.Show(" Deseja mesmo sair ?", My.Application.Info.Title, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning) = Windows.Forms.DialogResult.Yes Then
        End If
        Me.Close()
    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

    End Sub

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        ComboBox1.Items.Insert(0, "5")
        ComboBox1.Items.Insert(1, "6")
        ComboBox1.Items.Insert(2, "7")
        ComboBox1.Items.Insert(3, "8")
        ComboBox1.Items.Insert(4, "9")
        ComboBox1.Items.Insert(5, "10")
        ComboBox1.Items.Insert(6, "11")

        ComboBox2.Items.Insert(0, "2")
        ComboBox2.Items.Insert(1, "3")
        ComboBox2.Items.Insert(2, "4")
        ComboBox2.Items.Insert(3, "5")
        ComboBox2.Items.Insert(4, "6")
        ComboBox2.Items.Insert(5, "7")
        ComboBox2.Items.Insert(6, "8")
        ComboBox2.Items.Insert(7, "9")
        ComboBox2.Items.Insert(8, "10")
        ComboBox2.Items.Insert(9, "11")
    End Sub
End Class

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jpaulino

como faço agora quantidade de numeros e estrelas pedidos pelo utilizador?

estás a falar do número de estrelas e números ou de chaves? Podes ter uma textbox que permita ao utilizador indicar ou mesmo uma inputbox.

Depois é só substituir o "While list3.Count <> 5" por "While list3.Count <> variavelComTotalNumerosIndicados"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedrologin

Eu tenho que usar 2 combobox, 1 para numeros de 5 a 11 e outra para estrelas de 1 a 11, onde o valor selecionado pelo utilizador, altere a quantidade de numeros e estrelas a serem gerados e apresentados na devida textbox. Exemplo o utilizador selecionou 11 numeros e 5 estrelas, é gerado e colocado na textbox 11 numeros separados e noutra textbox 5 estrelas separadas.

O melhor que consegui foi este codigo abaixo sem exito.

  'Gerador de 5 a 11 numeros aleatorios sem repetições e ordenados
        If RadioButton2.Checked Then
            'adiciona a comb o valor selecionado na Combobox
            
            Dim rnd3 As New Random()
            Dim list3 As New List(Of Integer)
            Dim nume1 As String
            Dim quant_nume As String

            If ComboBox1.SelectedIndex <> -1 Then
                quant_nume = ComboBox1.SelectedItem.ToString

                While list3.Count <> quant_nume

                    ' Gera o número aleatório
                    Dim num As Integer = rnd3.Next(1, 50)

                    ' Caso não esteja na lista, adiciona-o
                    If Not list3.Contains(num) Then list3.Add(num)

                End While

                ' Ordena os resultados   
                list3.Sort()

                nume1 = list3.Count
                TextBox8.Text = nume1
            End If
        End If

Obrigado

EDIT: Geshi adicionado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jpaulino

Mas o que é que está a falhar? Não estás a ver os resultados, é isso? Podes fazer um ciclo na lista e colocar os resultados na textbox.

PS: Dá nomes sugestivos às coisas ... por exemplo o que é a TextBox8? Porque não dás o nome de txtResultado? O mesmo se aplica para tudo.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedrologin

Sim, dar nomes sujestivos é boa ideia. Mas o problema é que na txtresultado apresenta o valor da combobox. Expl: se o utilizador selecionar gerar uma chave de 8 numeros(nº8 da combobox) ele apresenta na textboxresultado somente o valor 8 da combobox e não a chave de 8 numeros.

Cumprimentos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Não estou acompanhar muito o tópico porque já estás a ser ajudado, mas relativamente à tua última  questão:

For i As Integer = 1 To ComboBox1.Text
           whatever.Next(1, 50) ' Isto vai gerar de 1 a 50 as vezes que foram seleccionadas na Combo
        Next

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jpaulino

Sim, dar nomes sujestivos é boa ideia. Mas o problema é que na txtresultado apresenta o valor da combobox. Expl: se o utilizador selecionar gerar uma chave de 8 numeros(nº8 da combobox) ele apresenta na textboxresultado somente o valor 8 da combobox e não a chave de 8 numeros.

Cumprimentos

Tens de fazer um ciclo na lista a que adicionas os números gerados de modo a construir o resultado, ou seja, a chave gerada.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedrologin

Ja tentei de varias maneiras sem exito.

Coloquei o iten da combobox selecionada aqui"While list3.Count <> comb_num_selec" está correto?

E não sei o que colocar em"chave_resul = ???????????" , ja coloquei "chave_resul = list3.Count " , mas aparece o numero da combobox.

Tentei a solução do bioshock mas tambem nao funcionou, dava erro em whatever.next()

desconheço muitas funçoes do vb e acho que ja derreti qualquer coisa no cerebro esta tarde.lol.

'**********Aposta multipla***********
        'Gerador de 5 a 11 numeros aleatorios sem repetições e ordenados
        If RadioButton2.Checked Then
            
            Dim rnd3 As New Random() 'gerador aleatorio
            Dim list3 As New List(Of Integer) ' list onde são guardados os numeros
            Dim chave_resul As String 'chave, resultado de 5 a 11 numeros
            Dim comb_num_selec As String ' numero selecionado pelo utilizador na combobox de 5 a 11

            'coloca em comb_num_selec o numero selecionado da combobox
            If ComboBox1.SelectedIndex <> -1 Then
                comb_num_selec = ComboBox1.SelectedItem.ToString

                While list3.Count <> comb_num_selec ????????

                    ' Gera o número aleatório
                    Dim num As Integer = rnd3.Next(1, 50)

                    ' Caso não esteja na lista, adiciona-o
                    If Not list3.Contains(num) Then list3.Add(num)

                End While
                ' Ordena os resultados   
                list3.Sort()

                    chave_resul = ???????????
                chaveresultextbox = chave_resul
            End If
        End If

EDIT: Geshi adicionado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedrologin

bioshock, eu coloquei "whatever.next" e não a minha variavel pois tu não saberias se eu estaria a falar deste codigo ou do que ja existe ante deste no meu programa. Em todo caso obrigado pela ajuda, mas por algum motivo que desconheço não funcionou.

Peço a bondade dos participantes a possibilidade de corrigir ou colocar o que está em falta no meu codigo para que o programa fique a funcionar.

o layout tem 1 combobox de 5 a 11 numeros, uma textbox, e um botao para gerar a chave de 5 a 11 numeros conforme a escolha do utilizador.

Infelizmente estou limitado ao pouco conhecimento que tenho.

Desde ja os meus agradecimentos.

Dim rnd3 As New Random() 'gerador aleatorio
            Dim list3 As New List(Of Integer) ' list onde são guardados os numeros
            Dim chave_resul As String 'chave, resultado de 5 a 11 numeros
            Dim comb_num_selec As String ' numero selecionado pelo utilizador na combobox de 5 a 11

            'coloca em comb_num_selec o numero selecionado da combobox
            If ComboBox1.SelectedIndex <> -1 Then
                comb_num_selec = ComboBox1.SelectedItem.ToString

                While list3.Count < comb_num_selec

                        ' Gera o número aleatório
                        Dim num As Integer = rnd3.Next(1, 50)

                        ' Caso não esteja na lista, adiciona-o
                        If Not list3.Contains(num) Then list3.Add(num)

                End While
                ' Ordena os resultados    
                list3.Sort()

                chave_resul = list3(0)
                TextBox8.Text = chave_resul

            End If
        End If

EDIT: Geshi adicionado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Andrepereira9

Boas

Pegando no teu código, basta trocares isto:

chave_resul = list3(0) 'isto apenas apresenta o valor que está na posição 0 da list3

por isto:

'Percorre a lista e adiciona os valores à variavel chave_resul
For i As Integer = 0 To comb_num_selec - 1
     'Se o valor do ciclo, for o mesmo que a quantidade de números gerados, apenas acrescenta o numero
     If i = comb_num_selec - 1 Then
          chave_resul &= list3(i).ToString
     Else 'Se o valor do ciclo, for menor que a quantidade de números gerados, acrescenta o numero e um traço, para separar os valores
          chave_resul &= list3(i).ToString + " - "
     End If
Next

TextBox8.Text = chave_resul


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedrologin

Caro Andrepereira9, obrigadíssimo. Funciona tal como eu queria :cheesygrin:. Confesso que nunca chegaria la sem esta ajuda, pois eu estava a inserir o ciclo incompleto e no sítio errado.

Agradeço a todos pela fantastica ajuda que me deram, após a concretização deste trabalho sinto-me mais instruido ;)...lol...ou pelo menos fiquei a entender o funcionamento de mais algumas funçoes do vb.

Ja agora alguem sabe como fazer um autosize a uma textbox. Exemplo, textbox com 5 numeros aumenta de tamanho, textbox com 3 numeros diminui de tamanho... isto é possivel?

Cumprimentos.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.