2

您如何使用 生成以二为单位上升的随机数Math.random()?例如,我试图从集合中生成一个随机数(2,4,6,8),你会怎么做?

4

7 回答 7

6

对于这个特定的集合,您可以使用

(int)(Math.random() * 4) * 2 + 2

这里:

  • Math.random()生成一个大于或等于 0.0 且严格小于 1.0 的数字;
  • (int)(... * 4)给出 0、1、2、3 之一.
  • ... * 2 + 2给出 2、4、6、8 之一.
于 2013-10-02T00:04:45.197 回答
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 变量以适合您的集合。如果它在集合中,它包括上限。

于 2013-10-02T00:12:17.077 回答
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之前的最后一个数字。stopstop

int choice = randInt(2, 8, 2); /* random choice from {2, 4, 6, 8} */

...解决了示例问题。

(几乎)部分是这不处理参数中的整数溢出或符号错误(step为零,step<0when first<last,反之亦然。)

于 2013-10-02T01:32:20.190 回答
0

我想添加一个更一般的答案。

假设集合中的最小整数为 A,集合的大小为 S。集合中的随机整数如下所示:

A + myRandom.nextInt(S) * 2

对于您在 Java 中的特定示例,它将是:

Random myRandom = new Random();
int randomNum = 2 + myRandom.nextInt(4) * 2;
于 2013-10-02T00:18:03.997 回答
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 值生成该集合。我知道。

于 2013-10-02T00:04:46.187 回答
0

将这些数字放入数组中。使用数组的长度生成一个随机数 - 1 并将其作为索引来随机选择一个数组元素。

于 2013-10-02T00:05:12.903 回答
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 */ 
于 2013-10-02T00:09:23.773 回答