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 -
- Funções matemáticas em C #
- Destruidor em c #
- Número reverso em Python
- Variáveis em c #
- Variáveis em JavaScript
- Gerador de número aleatório no Matlab
- Versões do Tableau
- Gerador de número aleatório em JavaScript
- Gerador de número aleatório em PHP