有人可以解释一下这是如何运作的。
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 谢谢!
答案 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