locked
Como não repetir um número aleatório? RRS feed

  • Pergunta

  • Eu preciso criar um programa que ao clicar em um botão ele gera um número aleatório que é armazenado em uma matriz. Então quando eu clicar de novo ele gera um número diferente e se ele for diferente, ele é somado com o outro e assim até quando eu quiser.  
    segunda-feira, 10 de março de 2014 21:53

Respostas

  • Gustavo, bom dia.

    Seguinte você cria o algorítimo que vai gerar esses números, depois que gerou você guarda esse valor gerado em uma List, na próxima vez que rodar o For você pega esse novo número gerado e verifica se ele já existe na List que contém todos os números que já foram somados. Com isso, você evita que números iguais sejam somados no Random.


    Se a resposta foi útil por favor qualifique. Italo Biguzi Duarte, Desenvolvedor ASP.NET C#, Italo.biguzzi@gmail.com

    • Sugerido como Resposta Rafa sibeira sexta-feira, 14 de março de 2014 15:41
    • Marcado como Resposta Giovani Cr sexta-feira, 14 de março de 2014 19:43
    terça-feira, 11 de março de 2014 09:38
  • Boa noite Gustavo_SP

    Você não quer que nenhum numero se repita é isso?

    Bom se for, manda o botão sortear o numero, e em seguida tenta usar um FOR na matriz, verificando se o numero sorteado não é igual a um já presente nela. Se for, você manda ele sortear novamente, caso contrário o programa continua.

    • Marcado como Resposta Giovani Cr sexta-feira, 14 de março de 2014 19:43
    segunda-feira, 10 de março de 2014 22:40
  • Eu preciso criar um programa que ao clicar em um botão ele gera um número aleatório que é armazenado em uma matriz. Então quando eu clicar de novo ele gera um número diferente e se ele for diferente, ele é somado com o outro e assim até quando eu quiser.  

    Não existe um algorítimo que retorne um número aleatório sem a possibilidade de repeti-lo.

    O que existe e é factível é você criar uma rotina que retorne uma lista com os números, entre um intervalo, selecionados de forma aleatória. Ou seja você informa um valor mínimo e um valor máximo e ele irá retornar uma lista com todos os números deste intervalo organizados de forma aleatória.

    Segue uma implementação:

    Public Function UniqueRandomGenerator(minVal As Integer, maxVal As Integer) As List(Of Integer)
    	Dim rand As New Random()
    	Dim uniqueList As New SortedList(Of Integer, Integer)()
    	For i As Integer = minVal To maxVal
    		uniqueList.Add(rand.[Next](), i)
    	Next
    
    	Return uniqueList.Values.ToList()
    End Function

    Você deverá gerar a lista na inicialização do programa e depois ir pegando número por número da lista conforme for necessário

    Fonte: generate random numbers with no repeat in c# - Stack Overflow


    Herbert Lausmann

    Meu BlogMeu perfil no Facebook

    • Sugerido como Resposta SammuelMiranda terça-feira, 11 de março de 2014 15:58
    • Marcado como Resposta Giovani Cr sexta-feira, 14 de março de 2014 19:43
    segunda-feira, 10 de março de 2014 22:43
  • Boa tarde Gustavo,

    Caso alguma sugestão resolva o seu problema não esqueça de marcar como resposta para fechar a sua Thread.

    Att,


    Giovani Cruzara – Microsoft Contingent Staff

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    Msdn Community Support

    Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Marcado como Resposta Giovani Cr sexta-feira, 14 de março de 2014 19:43
    quarta-feira, 12 de março de 2014 19:36

Todas as Respostas

  • Boa noite Gustavo_SP

    Você não quer que nenhum numero se repita é isso?

    Bom se for, manda o botão sortear o numero, e em seguida tenta usar um FOR na matriz, verificando se o numero sorteado não é igual a um já presente nela. Se for, você manda ele sortear novamente, caso contrário o programa continua.

    • Marcado como Resposta Giovani Cr sexta-feira, 14 de março de 2014 19:43
    segunda-feira, 10 de março de 2014 22:40
  • Eu preciso criar um programa que ao clicar em um botão ele gera um número aleatório que é armazenado em uma matriz. Então quando eu clicar de novo ele gera um número diferente e se ele for diferente, ele é somado com o outro e assim até quando eu quiser.  

    Não existe um algorítimo que retorne um número aleatório sem a possibilidade de repeti-lo.

    O que existe e é factível é você criar uma rotina que retorne uma lista com os números, entre um intervalo, selecionados de forma aleatória. Ou seja você informa um valor mínimo e um valor máximo e ele irá retornar uma lista com todos os números deste intervalo organizados de forma aleatória.

    Segue uma implementação:

    Public Function UniqueRandomGenerator(minVal As Integer, maxVal As Integer) As List(Of Integer)
    	Dim rand As New Random()
    	Dim uniqueList As New SortedList(Of Integer, Integer)()
    	For i As Integer = minVal To maxVal
    		uniqueList.Add(rand.[Next](), i)
    	Next
    
    	Return uniqueList.Values.ToList()
    End Function

    Você deverá gerar a lista na inicialização do programa e depois ir pegando número por número da lista conforme for necessário

    Fonte: generate random numbers with no repeat in c# - Stack Overflow


    Herbert Lausmann

    Meu BlogMeu perfil no Facebook

    • Sugerido como Resposta SammuelMiranda terça-feira, 11 de março de 2014 15:58
    • Marcado como Resposta Giovani Cr sexta-feira, 14 de março de 2014 19:43
    segunda-feira, 10 de março de 2014 22:43
  • Gustavo, bom dia.

    Seguinte você cria o algorítimo que vai gerar esses números, depois que gerou você guarda esse valor gerado em uma List, na próxima vez que rodar o For você pega esse novo número gerado e verifica se ele já existe na List que contém todos os números que já foram somados. Com isso, você evita que números iguais sejam somados no Random.


    Se a resposta foi útil por favor qualifique. Italo Biguzi Duarte, Desenvolvedor ASP.NET C#, Italo.biguzzi@gmail.com

    • Sugerido como Resposta Rafa sibeira sexta-feira, 14 de março de 2014 15:41
    • Marcado como Resposta Giovani Cr sexta-feira, 14 de março de 2014 19:43
    terça-feira, 11 de março de 2014 09:38
  • Boa tarde Gustavo,

    Caso alguma sugestão resolva o seu problema não esqueça de marcar como resposta para fechar a sua Thread.

    Att,


    Giovani Cruzara – Microsoft Contingent Staff

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    Msdn Community Support

    Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Marcado como Resposta Giovani Cr sexta-feira, 14 de março de 2014 19:43
    quarta-feira, 12 de março de 2014 19:36