Olá do outro lado da tela. Qualquer um de nós, mais cedo ou mais tarde, se depara com a necessidade de gerar um número aleatório em um determinado intervalo, seja um número real ou um número inteiro. Para que? Na verdade, isso não é importante, pode ser uma função para calcular a chance de desencadear algum evento, obter um multiplicador aleatório, ou qualquer outra. Então, descobrimos porque é que isto é necessário, nomeadamente para qualquer coisa :) Na verdade, existem muitos métodos para obter um número pseudo-aleatório, mas darei um exemplo com a classe
Math
, nomeadamente o método random()
; O que nós temos? Chamar o método Math.random()
retorna um número real pseudoaleatório ( double
) do intervalo [0;1)
, ou seja, de 0 a 1 excluindo 1, o que significa que o número máximo no intervalo é 0,99999999999... Ok, obtivemos um número pseudoaleatório, mas e se precisarmos de nosso próprio alcance? Por exemplo, precisamos de um número pseudoaleatório no intervalo [0;100)? Escrevemos o código:
public static void main(String... args)
{
final double max = 100.; // Максимальное число для диапазона от 0 до max
final double rnd = rnd(max);
System.out.println("Псевдослучайное вещественное число: " + rnd);
}
/**
* Метод получения псевдослучайного вещественного числа от 0 до max (исключая max);
*/
public static double rnd(final double max)
{
return Math.random() * max;
}
Não foi ruim, mas max
(no nosso caso) ainda não conseguiremos. Para obter um número aleatório no intervalo [0;100], precisamos adicionar max
1 ao nosso e depois convertê-lo para um número inteiro como int
ou long
(dependendo dos intervalos que você usará). Escrevemos o código:
public static void main(String... args)
{
final int max = 100; // Максимальное число для диапазона от 0 до max
final int rnd = rnd(max);
System.out.println("Псевдослучайное целое число: " + rnd);
}
/**
* Метод получения псевдослучайного целого числа от 0 до max (включая max);
*/
public static int rnd(int max)
{
return (int) (Math.random() * ++max);
}
Nota: Como você pode ver, a variável max foi incrementada pela forma de prefixo. (Se você não sabe o que é isso, aconselho que leia meu artigo ) Ótimo, conseguimos o que queríamos, mas se precisarmos de um intervalo não de 0, mas por exemplo [10;75] Escrevemos o código:
public static void main(String... args)
{
final int min = 10; // Минимальное число для диапазона
final int max = 75; // Максимальное число для диапазона
final int rnd = rnd(min, max);
System.out.println("Псевдослучайное целое число: " + rnd);
}
/**
* Метод получения псевдослучайного целого числа от min до max (включая max);
*/
public static int rnd(int min, int max)
{
max -= min;
return (int) (Math.random() * ++max) + min;
}
Analisando o código do método rnd
:
Минимальное число диапазона = 10;
Максимальное число диапазона = 75;
max -= min; // Отнимаем от максимального значения минимальное для получения множителя псевдослучайного вещественного числа.
O número máximo após o cálculo é 65. O número real pseudo-aleatório (por exemplo) é 0,18283417347179454 (foi obtido chamando Math.random()
). O número máximo foi incrementado com um prefixo antes da multiplicação. O número máximo agora é 66. Multiplique 0,18283417347179454 por 66. O resultado da multiplicação é 12,06705544913844. Convertemos o resultado da multiplicação do número máximo por um número real pseudoaleatório em um tipo inteiro int
. Adicionamos o número mínimo ao resultado transformado que é igual a 12. Retornamos o resultado: 22 Como pode ser visto na análise, mesmo que o número real pseudo-aleatório seja igual a zero, retornaremos nosso mínimo como resultado de adicionar nosso número mínimo com o resultado da multiplicação. Espero que isso tenha sido útil e informativo para você. Boa sorte em dominar Java;) Mais alguns de meus artigos: O que é incrementar e decrementar O operador de divisão de módulo
GO TO FULL VERSION