Pergunta

Deixe-me começar pedindo desculpas pela minha péssima gramática e ortografia.

Tenho um projeto MVC3 que cria um Deck e adiciona 52 cartas nele.Então eu adicionei uma função shuffle que só funciona quando eu passo o loop no método shuffle.

Na minha classe Deck eu crio um Array que contém 52 objetos PlayingCard.O Deck possui um método que copia a matriz para uma lista exibida na minha opinião e também tem um método que embaralha a lista.

Não é fácil de explicar, mas o código só funciona um tempo a menos que eu passe por isso.

Meu método shuffle no meu modelo de Deck.

 public void Shuffle()
 {
    for (int i = 0; i < 51; i++)
    {
        PlayingCard temp;
        temp = myDeck[i];
        Random rnd = new Random();
        int randomNr = rnd.Next(51);
        myDeck[i] = myDeck[randomNr];
        myDeck[randomNr] = temp;
    }   
}

Saída após embaralhamento, sem passo a passo:

*4 diamantes1 corações 2 corações 3 corações 4 corações 5 corações 6 corações 7 corações 8 corações 9 corações 10 corações 11 corações 12 corações 13 corações 1 espadas 2 espadas 3 espadas 4 espadas 5 espadas 6 espadas 7 espadas 8 espadas 9 espadas 10 espadas 13 espadas 1 clubes 2 clubes 3 clubes 4 clubes 5 clubes 6 clubes 7 clubes 8 clubes 9 clubes 10 clubes 11 clubes 12 clubes 13 clubes 1 diamantes 2 diamantes12 diamantes3 diamantes 5 diamantes 6 diamantes 7 diamantes 8 diamantes 9 diamantes 10 diamantes 11 diamantes 13 diamantes *

Saída após passar 15 vezes:

2 espadas 3 clubes 5 espadas 3 diamantes 12 diamantes 13 corações 11 corações 1 espadas 6 clubes 5 diamantes 1 clubes 12 corações 7 clubes 13 espadas 2 clubes 10 corações 3 espadas 4 espadas 3 corações 6 espadas 7 pistas 12 espadas 8 corações 7 corações 1 corações 2 corações 4 clubes 5 clubes 9 corações 6 corações 8 clubes 9 clubes 10 clubes 11 clubes 12 clubes 13 clubes 1 diamantes 2 diamantes 4 corações 4 diamantes 5 corações 6 diamantes 7 diamantes 8 diamantes 9 diamantes 10 diamantes 11 diamantes 13 diamantes

Saída depois de percorrer todo o loop:

10 corações 6 clubes 8 corações 5 corações 5 clubes 7 diamantes 5 espadas 11 diamantes 12 espadas 12 clubes 8 diamantes 5 diamantes 1 clubes 9 espadas 10 diamantes 12 corações 8 espadas 9 clubes 13 clubes 6 corações 1 espadas 11 espadas 1 corações 12 diamantes 4 clubes 4 clubes 3 clubes 8 clubes 9 diamantes 7 clubes 2 clubes 3 diamantes 1 diamantes 7 espadas 10 espadas 2 corações 6 espadas 13 espadas 4 espadas 2 espadas 6 diamantes 4 corações 2 diamantes 4 diamantes 11 clubes 7 corações 11 corações 3 espadas 3 corações 10 clubes 13 corações 9 corações 13 diamantes

Como mostrado, o loop só é executado quando eu passo por ele.Tentei loops diferentes, fiz um novo projeto, movi a função shuffle para o controlador, nada adianta.

Alguém tem alguma idéia de como devo resolver isso?

Foi útil?

Solução

Eu criei um aplicativo de exemplo em torno disso e movendo Random rnd = new Random() fora do loop me dá o comportamento que eu esperaria.

A razão pela qual pareceu embaralhar apenas uma carta, na minha opinião, é porque o valor gerado aleatoriamente era o mesmo para todo o loop.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top