none
Método que retorna numero randomico, retornando numeros repetidos? RRS feed

  • Pergunta

  • Estou com uma duvida, quero saber porque quando eu invoco um método
    que retorna um numero aleatório ele retorna os valores todos iguais,
    mas quando eu chamo o metodo diretamente da classe random ele retorna todos valores diferentes.
    ??

    static void Main(){
    	for (int i = 0; i <= 10; i++)
    	{
    		Console.WriteLine(randomico(1,5));
    	}
    }
    public static int randomico(int a, int b) {
    	Random n = new Random();
    	return n.Next(a, b);
    }
    
    /* output
    3
    3
    3
    3
    3
    */

    • Editado Hannibal0hn terça-feira, 27 de dezembro de 2016 20:19
    terça-feira, 27 de dezembro de 2016 20:18

Respostas

  • Olá,

    Essa thread responde sua pergunta: http://stackoverflow.com/questions/1654887/random-next-returns-always-the-same-values

    Resumindo o que está dito lá: Se você criar um novo objeto Random a cada iteração em curto espaço de tempo (é o caso do seu laço de repetição), passando os mesmos parâmetros para ele, o resultado tende a ser o mesmo, pelo fato que o Random se baseia no horário do sistema para gerar essa certa aleatoriedade.

    Para resolver isso, crie apenas um objeto e chame-o quando precisar. Exemplo:

    Random n = new Random();
    
    static void Main(){
       for (int i = 0; i <= 10; i++)
       {
            Console.WriteLine(randomico(1,5));
       }
    }
    
    public static int randomico(int a, int b)
    {
       return n.Next(a, b);
    }

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    terça-feira, 27 de dezembro de 2016 20:36