none
Utilizando o Random() no c#, observo um possível vício de repetição de numero, estou utilizando no I Ching que montei, vocês tem algo a acrescentar? RRS feed

  • Pergunta

  •    //---------------------------------------------------------------------------
            // MovimentoLinhas - realiza o sorteio dos lançamentos de moedas ou varetas.
            private void MovimentoLinhas(int wLin, int wFlag)
            {
                int xT = 0;
                int nBusca = 0;
                int nBusca1 = 0;
                int nBusca2 = 0;
                int nBusca3 = 0;
                int nBusca4 = 0;
                int nBusca5 = 0;
                if (wFlag == 0)  // jogar 6 varetas (6 a 9)
                {
                    // executar operação randomica
                    Random rand = new Random();
                    Random rand1 = new Random();
                    Random rand2 = new Random();
                    Random rand3 = new Random();
                    Random rand4 = new Random();
                    Random rand5 = new Random();
                    wLinha1 = rand.Next(6, 10); // (6,10)
                    wLinha2 = rand1.Next(6, 10);
                    wLinha3 = rand2.Next(6, 10);
                    wLinha4 = rand3.Next(6, 10);
                    wLinha5 = rand4.Next(6, 10);
                    wLinha6 = rand5.Next(6, 10);
                    return; 

                }
                else if (wFlag == 1) // jogar 3 moedas (2 ou 3)
                {
                    // executar operação randomica
                    Random rand = new Random();        
                    
                    bool wTrab = true;
                    int wValor = 0;
                    int wVez = 0; // acusa 3 moedas lançadas.
                    while (wTrab)
                    {
                        nBusca = rand.Next(0, 9);  // vai ate 9 a escolha
                        if ( nBusca == 2 || nBusca == 3)
                        {
                            wValor = wValor + nBusca;
                            wVez++;
                            if (wVez > 2)
                            {

                               // MessageBox.Show("linha " + wLin.ToString() +
                               //      " = " + wValor.ToString());
                                nBusca = wValor; //atualiza o total das 3 moedas
                                wTrab = false;
                                break;
                            }
                        }
                    }    



                }
                // define  saida
                if (wLin == 1) { wLinha1 = nBusca; return; }
                if (wLin == 2) { wLinha2 = nBusca1; return; }
                if (wLin == 3) { wLinha3 = nBusca2; return; }
                if (wLin == 4) { wLinha4 = nBusca3; return; }
                if (wLin == 5) { wLinha5 = nBusca4; return; }
                if (wLin == 6) { wLinha6 = nBusca5; return; }
            }
    terça-feira, 7 de janeiro de 2020 00:48

Todas as Respostas

  • Fabiano,

    Esse "vício" que você percebeu se deve ao fato de você estar criando as variáveis dentro do método, nesse caso faça conforme exemplo abaixo e teste para ver se teve mudança!

            /*Criar Variaveis Fora do Metodo */
            private Random rand = new Random();
            private Random rand1 = new Random();
            private Random rand2 = new Random();
            private Random rand3 = new Random();
            private Random rand4 = new Random();
            private Random rand5 = new Random();
            /* Seu Método */
            private void MovimentoLinhas(int Wlin, int wFlag)
            {
                int xT, nBusca, nBusca1, nBusca2, nBusca3, nBusca4, nBusca5;
                if (wFlag == 0)  // jogar 6 varetas (6 a 9)
                {
                    wLinha1 = rand.Next(6, 10); // (6,10)
                    wLinha2 = rand1.Next(6, 10);
                    wLinha3 = rand2.Next(6, 10);
                    wLinha4 = rand3.Next(6, 10);
                    wLinha5 = rand4.Next(6, 10);
                    wLinha6 = rand5.Next(6, 10);
                    return;
                }
            }

    ** Outra coisa, se aceita uma dica, eu não usaria 6 variáveis RANDOM para essa função, usaria uma única variável e com ela geraria os valores **


    terça-feira, 7 de janeiro de 2020 12:20