JavaRush /Blogue Java /Random-PT /Gere um número aleatório em um determinado intervalo
L2CCCP
Nível 9

Gere um número aleatório em um determinado intervalo

Publicado no grupo Random-PT
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. Gerando um número aleatório em um determinado intervalo - 1Para 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 max1 ao nosso e depois convertê-lo para um número inteiro como intou 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
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION