在一个间隔中获取随机偶数?

时间:2017-11-08 17:09:54

标签: java

有人可以解释一下这是如何运作的。

int min = 2;
int max = 10;
int random = (int)(Math.random()*(max-min+1))/2*2+2; 
System.out.println("The number is " + random);

不确定公式部分 - (max-min + 1))/ 2 * 2 + 2 谢谢!

2 个答案:

答案 0 :(得分:1)

我们可以用数学的方式思考这个问题。

公式就像一个数学函数:

f(x) = floor(floor(x * (10 - 2 + 1)) / 2) * 2 + 2

int演员阵容基本上是数字,而整数除以2只是一个楼层。

假设函数的域= {0≤x<1。 1}(我们知道这是因为那是Math.random()所做的),我们可以查看每一步,看看函数的范围是如何变化的。

x * (10 - 2 + 1)

这使得范围= {0≤y<1。 9}

floor(x * (10 - 2 + 1)) // adding floor function

这使得范围= {0,1,2,3,4,5,6,7,8,9}

floor(floor(x * (10 - 2 + 1)) / 2) // dividing by two and flooring

这使得范围= {0,1,2,3,4}

floor(floor(x * (10 - 2 + 1)) / 2) * 2 // multiplying by 2

这使得范围= {0,2,4,6,8}

floor(floor(x * (10 - 2 + 1)) / 2) * 2 + 2 // adding 2

这使得范围= {2,4,6,8,10}

如您所见,唯一可能的输出最终是2,4,6,8,10。

答案 1 :(得分:0)

您还可以使用已经实现的ThreadLocalRandom#nextInt(int,int)方法,可以像下面这样使用:

int min = 2;
int max = 10;

// get local random
ThreadLocalRandom rnd = ThreadLocalRandom.current();

int randomEven = (rnd.nextInt(min, max) / 2) * 2