NOME ALEATÓRIO SEM REPETI?ÃO
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.
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)
Não entendi...
Vc quer distribuir 3 nomes em 3 textbox de forma aleatória. é isso?
Vc quer distribuir 3 nomes em 3 textbox de forma aleatória. é isso?
Isso mesmo
Se você souber explicar como essa linha funciona, você ganhou o jogo:
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)
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)
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)
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.
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)
Uma maneira mais elegante:
[ô]Para usar
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