您如何使用 生成以二为单位上升的随机数Math.random()
?例如,我试图从集合中生成一个随机数(2,4,6,8)
,你会怎么做?
7 回答
对于这个特定的集合,您可以使用
(int)(Math.random() * 4) * 2 + 2
这里:
Math.random()
生成一个大于或等于 0.0 且严格小于 1.0 的数字;(int)(... * 4)
给出 0、1、2、3 之一.... * 2 + 2
给出 2、4、6、8 之一.
好的,让我们做一个真正的通用解决方案。
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 变量以适合您的集合。如果它在集合中,它包括上限。
(几乎)完全通用的方法并不难。
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
when first<last
,反之亦然。)
我想添加一个更一般的答案。
假设集合中的最小整数为 A,集合的大小为 S。集合中的随机整数如下所示:
A + myRandom.nextInt(S) * 2
对于您在 Java 中的特定示例,它将是:
Random myRandom = new Random();
int randomNum = 2 + myRandom.nextInt(4) * 2;
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 值生成该集合。我知道。
将这些数字放入数组中。使用数组的长度生成一个随机数 - 1 并将其作为索引来随机选择一个数组元素。
您还可以像这样使用 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 */