O que é o gerador de números aleatórios em c #?

Um gerador de números aleatórios é uma biblioteca interna em C # que gera números inteiros e de ponto flutuante aleatoriamente. Cada vez que o método relevante da biblioteca é chamado, ele retorna um número aleatório. Uma série de números aleatórios é um conjunto de números que não seguem nenhum padrão. O gerador de números aleatórios em C # tende a gerar essa série sempre que invocado.

Classe aleatória em c #

  • Então, como o C # gera uma série de números aleatórios? A resposta está dentro da classe aleatória do espaço para nome do sistema C #.
  • Classe aleatória é uma classe geradora de números pseudo-aleatórios. Isso significa que essa classe tem a tarefa de gerar uma série de números que não seguem nenhum padrão. Mas, uma máquina é realmente capaz de gerar números aleatórios? Como a máquina saberia qual número gerar a seguir? Afinal, a máquina foi projetada para seguir instruções e executar algoritmos.
  • Não, a máquina não pode gerar números aleatórios por si só. Existe um algoritmo matemático definido, baseado no relógio atual e no estado da máquina, que o orienta a escolher números de um conjunto. Todos os números no conjunto têm uma probabilidade igual de serem apanhados. Assim, eles não são perfeitamente aleatórios. Eles seguem um padrão. Só que o padrão é suficientemente aleatório para atender aos requisitos práticos humanos.

Pseudo e seguro

A próxima pergunta que vem à mente é por que eles chamam de classe geradora de números pseudo-aleatórios? Vamos entender isso através do comportamento humano da vida real. Quando um ser humano é solicitado a selecionar uma cor aleatória, ele escolhe uma determinada cor. Digamos que ele escolheu Amarelo. O que o levou a escolher amarelo? Poderia ser sua cor favorita ou a de seu ambiente, ou ele poderia estar pensando em algo amarelo na época. Esse comportamento humano que leva à decisão de escolher algo aleatoriamente é chamado Semente no mundo da aleatoriedade. A semente é o gatilho ou o ponto inicial da aleatoriedade.

Agora, quando a semente é previsível, os números aleatórios se tornam menos aleatórios. Eles são chamados de números pseudo-aleatórios. Quando imprevisíveis, eles são chamados de números aleatórios seguros.

A classe aleatória C # usa o registro de data e hora atual como a semente, o que é muito previsível. E, portanto, o termo classe gerador de números pseudo-aleatórios.

Classe RNGCryptoServiceProvider

A classe RNGCryptoServiceProvider do espaço para nome System.Security.Cryptography é capaz de gerar números aleatórios seguros, que podem ser usados ​​como senhas.

Funções de gerador de número aleatório em c #

A primeira coisa a gerar um número aleatório em C # é inicializar a classe Random. Isso pode ser feito por qualquer um dos dois construtores da classe:

  • Random (): inicializa um objeto da classe Random usando um valor inicial baseado em tempo. O valor inicial é o registro de data e hora atual da máquina. Embora, nas versões posteriores, isso tenha sido alterado para ser baseado em GUID.
  • Aleatório (Int32): inicializa um objeto da classe Random usando o valor inicial especificado. Para obter o próximo número aleatório da série, chamamos o método Next () da classe Random.
  • Próximo (): Retorna um inteiro Int32 pseudo-aleatório não negativo.
  • Próximo (Int32): Retorna um inteiro Int32 pseudo-aleatório não negativo menor que o número inteiro especificado.
  • Próximo (Int32, Int32): Retorna um inteiro Int32 pseudo-aleatório não negativo dentro do intervalo especificado.

Inteiros do Gerador de Número Aleatório em C #

Vamos ver um exemplo de como gerar números inteiros aleatórios:

Exemplo 1

O exemplo abaixo gera números Int32 aleatórios.

Código:

using System;
public class Program
(
public static void Main()
(
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number (0) : (1)", i + 1, GenerateRandomInt(rnd));
)
public static int GenerateRandomInt(Random rnd)
(
return rnd.Next();
)
)

Resultado:

Exemplo 2

O exemplo abaixo gera números Int32 aleatórios no intervalo de 0 a 100.

Código:

using System;
public class Program
(
public static void Main()
(
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number (0) : (1)", i + 1, GenerateRandomInt(rnd));
)
public static int GenerateRandomInt(Random rnd)
(
return rnd.Next(100);
)
)

Resultado:

Exemplo 3

O exemplo abaixo gera números Int32 aleatórios no intervalo de 50 a 100.

Código:

using System;
public class Program
(
public static void Main()
(
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number (0) : (1)", i + 1, GenerateRandomInt(rnd));
)
public static int GenerateRandomInt(Random rnd)
(
return rnd.Next(50, 100);
)
)

Resultado:

Gerando números de ponto flutuante

Vamos ver um exemplo de como gerar números aleatórios de ponto flutuante:

Exemplo 1

O exemplo abaixo gera números Int32 aleatórios.

Código:

using System;
public class Program
(
public static void Main()
(
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number (0) : (1)", i + 1, GenerateRandomInt(rnd));
)
public static double GenerateRandomInt(Random rnd)
(
return rnd.NextDouble();
)
)

Resultado:

Um erro muito comum

O erro mais comum que os desenvolvedores cometem ao gerar números aleatórios é que, para cada número aleatório, eles criam um novo objeto de Classe Aleatória. Conforme ilustrado no exemplo abaixo:

Exemplo 1

Código:

using System;
public class Program
(
public static void Main()
(
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number (0) : (1)", i + 1, GenerateRandomInt());
)
public static int GenerateRandomInt()
(
Random rnd = new Random(); //a very common mistake
return rnd.Next();
)
)

Resultado:

Como os números aleatórios são todos iguais e por que isso aconteceu?

Como explicado no trabalho da Random Class, os números gerados são baseados no valor inicial e no estado atual da máquina. Qualquer instância da classe Random começa com o valor inicial, salva o estado atual e o utiliza para gerar o próximo número aleatório. No código acima, o erro foi criar uma nova instância da classe Random em todas as iterações do loop. Portanto, antes que a hora no relógio interno seja alterada, o código é totalmente executado e cada instância da classe Random é instanciada com o mesmo valor inicial. Isso resulta no mesmo conjunto de números gerados sempre.

Conclusão - Gerador de números aleatórios em C #

Neste artigo, aprendemos sobre o gerador de números aleatórios em C # e como ele trabalha internamente para gerar números aleatórios. Também aprendemos brevemente o conceito de números pseudo-aleatórios e seguros-aleatórios. Essas informações são suficientes para os desenvolvedores usarem a classe Random em seus aplicativos. Mergulho profundo, se estiver interessado em explorar mais sobre números aleatórios para senhas e senhas únicas.

Artigos recomendados

Este é um guia para o Random Number Generator em C #. Aqui discutimos como o Random Number Generator funciona, o conceito de números pseudo-aleatórios e seguros-aleatórios e o uso do Número Aleatório. Você também pode consultar nossos outros artigos relacionados para saber mais -

  1. Funções matemáticas em C #
  2. Destruidor em c #
  3. Número reverso em Python
  4. Variáveis ​​em c #
  5. Variáveis ​​em JavaScript
  6. Gerador de número aleatório no Matlab
  7. Versões do Tableau
  8. Gerador de número aleatório em JavaScript
  9. Gerador de número aleatório em PHP