NOME ALEATÓRIO SEM REPETI?ÃO

GUIMANCINE 09/05/2016 11:00:19
#461917
Tenho o seguinte comando pra fazer um sorteio aleatório:
Mais não estou conseguindo fazer o seguinte, nesse comando tenho três txtjogador com nome, quando eu clico no botaosortear o comando me joga um nome no txtzageiro, como eu faco pra jogar os dados em três textbox.

  Dim palavrasZageiroTimeA(2) As String
Dim NumeroZageiroTimeA As Integer

palavrasZageiroTimeA(0) = TxtJogador4.Text
palavrasZageiroTimeA(1) = TxtJogador5.Text
palavrasZageiroTimeA(2) = TxtJogador6.Text

NumeroZageiroTimeA = Int((palavrasZageiroTimeA.Count * Rnd()))
TxtZageiroTimeA.Text = palavrasZageiroTimeA(NumeroZageiroTimeA)



PLUGSOFTSM 09/05/2016 12:15:03
#461923
Não entendi...
Vc quer distribuir 3 nomes em 3 textbox de forma aleatória. é isso?
GUIMANCINE 09/05/2016 13:21:30
#461925
Isso mesmo
DS2T 09/05/2016 13:37:41
#461926
Se você souber explicar como essa linha funciona, você ganhou o jogo:

NumeroZageiroTimeA = Int((palavrasZageiroTimeA.Count * Rnd()))



Seu código não será nada mais do que a execução dessa linha mais duas vezes (excluindo o sorteado do Array ... inclusive, recomendo usar uma lista genérica, já que vai precisar remover itens da lista mesmo)
JABA 09/05/2016 16:18:38
#461938
Resposta escolhida
O número aleatório sorteado estava sendo sempre o mesmo, faça conforme abaixo:

  Dim palavrasZageiroTimeA(2) As String
Dim NumeroZageiroTimeA As Integer

palavrasZageiroTimeA(0) = TxtJogador4.Text
palavrasZageiroTimeA(1) = TxtJogador5.Text
palavrasZageiroTimeA(2) = TxtJogador6.Text

[txt-color=#e80000] Dim r As New Random[/txt-color]

NumeroZageiroTimeA = [txt-color=#e80000]r.Next(0, palavrasZageiroTimeA.Length)[/txt-color]

TxtZageiroTimeA.Text = palavrasZageiroTimeA(NumeroZageiroTimeA)
DS2T 09/05/2016 17:28:05
#461940
Citação:

O número aleatório sorteado estava sendo sempre o mesmo, faça conforme abaixo:



Fala aí Jaba, beleza? (Aquela mina do video continua sendo minha).

Acho que se ele usou a instrução Randomize lá no ínicio do código, o RND vai ter o mesmo efeito, sendo que ele gerou uma semente de randomização. Coisas de VB6...
Concordo que fazendo pelo objeto Random fica muito melhor.

O que ele precisa ali, é ter a noção de sortear o index, passar pro textbox escolhido, apagar o index da lista, sortear novamente, passar pro outro textbox, apagar da lista ...
Porque apagando da lista, você vai ter um domínio cada vez menor de index pra sortear, até que o Count seja zero.
JABA 09/05/2016 18:19:52
#461941
Citação:

Fala aí Jaba, beleza? (Aquela mina do video continua sendo minha).



Acho que você tem razão, ela nem responde mais as minhas mensagens.

Respondendo ao tópico, acho que a melhor forma é embaralhar a lista, como se fosse um baralho mesmo; assim não seria necessário remover os elementos.

    Public Sub Embaralhar(palavrasZageiroTimeA() As String)

Dim r As New Random

For i As Integer = 0 To palavrasZageiroTimeA.Length - 1
Dim s1 As Integer = r.Next(0, palavrasZageiroTimeA.Length)
Threading.Thread.Sleep(50)
Dim s2 As Integer = r.Next(0, palavrasZageiroTimeA.Length)
Dim t As String = palavrasZageiroTimeA(s1)

palavrasZageiroTimeA(s1) = palavrasZageiroTimeA(s2)
palavrasZageiroTimeA(s2) = t
Next
End Sub


[ô]Para usar:

        Dim palavrasZageiroTimeA(2) As String

palavrasZageiroTimeA(0) = [Ô]A[Ô]
palavrasZageiroTimeA(1) = [Ô]B[Ô]
palavrasZageiroTimeA(2) = [Ô]C[Ô]

Embaralhar(palavrasZageiroTimeA)

TxtZageiroTimeA.Text = palavrasZageiroTimeA(0)
TxtZageiroTimeB.Text = palavrasZageiroTimeA(1)
TxtZageiroTimeC.Text = palavrasZageiroTimeA(2)
JABA 09/05/2016 19:40:00
#461942
Uma maneira mais elegante:

    Public Function Embaralhar(palavrasZageiroTimeA() As String) As Array
Dim r As New Random
Return palavrasZageiroTimeA.OrderBy(Function() r.Next).ToArray
End Function


[ô]Para usar

    Dim palavrasZageiroTimeA(2) As String

palavrasZageiroTimeA(0) = [Ô]A[Ô]
palavrasZageiroTimeA(1) = [Ô]B[Ô]
palavrasZageiroTimeA(2) = [Ô]C[Ô]

[txt-color=#e80000]palavrasZageiroTimeA [/txt-color]= Embaralhar(palavrasZageiroTimeA)

TxtZageiroTimeA.Text = palavrasZageiroTimeA(0)
TxtZageiroTimeB.Text = palavrasZageiroTimeA(1)
TxtZageiroTimeC.Text = palavrasZageiroTimeA(2)

Tópico encerrado , respostas não são mais permitidas