如何使用Math.random()
生成两个上升的随机数?例如,我正试图从集(2,4,6,8)
生成一个随机数,你会怎么做?
答案 0 :(得分:5)
对于此特定集,您可以使用
(int)(Math.random() * 4) * 2 + 2
下面:
Math.random()
生成的数字大于或等于0.0且严格小于1.0; (int)(... * 4)
给出0,1,2,3中的一个。... * 2 + 2
给出了2,4,6,8中的一个。答案 1 :(得分:2)
好的,让我们做一个真正的通用解决方案。
int lower = 2;
int upper = 8;
int step = 2;
int rand = (int)(Math.random() * (upper-lower+1));
int result = rand - rand%step + lower;
如果要在另一个集合中生成数字而不是指定的数字,只需更改lower,upper和step变量以适合您的集合。它包括上限,如果它在集合中。
答案 2 :(得分:1)
(几乎)完全一般的方法并不那么难。
static randInt(int first, int last, int step) {
int nsteps = (last+1-first) / step;
return first + step*(int)(nsteps*Math.random());
}
如果{start, start+step, start+2*step, ... }
不是序列的一部分,那么返回从stop
到stop
的随机整数,或stop
之前的最后一个数字。
int choice = randInt(2, 8, 2); /* random choice from {2, 4, 6, 8} */
...解决了样本问题。
(几乎)部分是这不会处理参数中的整数溢出或符号错误(step
为零,step<0
时为first<last
,反之亦然。)< / p>
答案 3 :(得分:0)
int[] numSet={2,4,6,8};
Random myRand=new Random();
int myNum=numSet[myRand.nextInt(numSet.length)];
这会创建一个数字数组,即随机对象,然后从数组中选择一个随机元素。这并不假设数字是任何类型的数学系列。就此而言,它们可以是11,25,31,876,984368,7432,84562。
请不要告诉我,有一个多项式从其y值生成该集合。我知道。 子>
答案 4 :(得分:0)
将这些数字放在数组中。 使用数组的长度生成一个随机数 - 1并将其用作随机选择数组元素的索引。
答案 5 :(得分:0)
你也可以像这样使用java.util.Random类:
int values[] = {2,4,6,8};
Random randomGenerator = new Random();
int randomInt = randomGenerator.nextInt(values.length);
int randomValue = values[randomInt]; /* Here's your random value from your set */
答案 6 :(得分:0)
我想补充更一般的答案。
假设集合中的最小整数是A,集合的大小是S.集合中的随机整数将是这样的:
A + myRandom.nextInt(S) * 2
对于Java中的具体示例,它将是:
Random myRandom = new Random();
int randomNum = 2 + myRandom.nextInt(4) * 2;