JavaRush /Java 博客 /Random-ZH /生成给定范围内的随机数
L2CCCP
第 9 级

生成给定范围内的随机数

已在 Random-ZH 群组中发布
你好,在屏幕的另一边。我们中的任何人迟早都会遇到需要生成给定范围内的随机数的情况,无论是实数还是整数。 生成给定范围内的随机数 - 1为了什么?事实上,这并不重要,它可以是计算触发某个事件的机会、获得随机乘数或任何其他的函数。所以,我们弄清楚为什么需要这个,即任何东西:)其实,有很多获取伪随机数的方法,但我会用类来举一个例子Math,即方法random();我们有什么?调用该方法会返回一个范围 中的Math.random()伪随机实数 ( ) ,即从 0 到 1(不包括 1),这意味着范围中的最大数字是 0.99999999999... 好吧,我们得到了一个伪随机数,但是如果我们需要自己的范围怎么办?例如,我们是否需要 [0;100) 范围内的伪随机数? 我们编写代码:double[0;1)
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;
}
结果还不错,但max(在我们的例子中)我们仍然无法得到它。为了获得 [0;100] 范围内的随机数,我们需要加1,然后将其转换为类似or 的max整数(取决于您将使用的范围)。 我们编写代码:intlong
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);
}
注意:正如您所看到的,max 变量是通过前缀形式递增的。(如果你不知道这是什么,我建议你阅读我的文章)太好了,我们得到了我们想要的,但是如果我们需要一个范围不是从0开始,而是例如[10;75] 我们编写代码:
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;
}
从方法中解析代码rnd

Минимальное число диапазона = 10;
Максимальное число диапазона = 75;
max -= min; // Отнимаем от максимального значения минимальное для получения множителя псевдослучайного вещественного числа.
计算后的最大数为65。 伪随机实数(例如)为0.18283417347179454(通过调用获得Math.random())。最大数在乘法之前以前缀形式递增。现在最大数量为 66。将 0.18283417347179454 乘以 66。乘法结果为 12.06705544913844。我们将最大数乘以伪随机实数的结果转换为整数类型int。我们将最小数添加到转换结果中,等于 12。我们返回结果: 22 从分析中可以看出,即使伪随机实数等于 0,我们也会返回最小值作为结果将最小数与乘法结果相加。我希望这对您有用且信息丰富。祝你掌握 Java 好运;) 我的几篇文章: 什么是递增和 递减 模除运算符
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION