从Min到Max生成随机整数?

时间:2011-08-28 04:35:25

标签: java android random

我想生成一个随机的Integer:

  1. 在[Min,Max] [{1}}
  2. 范围内
  3. 范围可以是[5,20],[ - 29,-3]或[-13,13](它可以在任何范围内,正面或负面或介于两者之间)
  4. Android中的代码运行良好
  5. 到目前为止我得到的是这个,但它似乎不适用于负范围!

    inclusive

5 个答案:

答案 0 :(得分:10)

我很确定你想要

Min+(int)(Math.random()*((Max-Min) + 1));

但是,我应该指出范围[-3,-29]的最小值和最大值相反。 (与Merlyn指出的[5,-13]相同。)

如果您只想为该范围输入任意两个数字,则a和b然后使用代码

int Min = Math.min(a,b);
int Max = Math.max(a,b);

这样你就不用担心订单了。这甚至适用于== b。

答案 1 :(得分:1)

试试这个

int min = -100;
int max = 100;
Random rand = new Random();
return rand.nextInt(max - min + 1) + min;

答案 2 :(得分:1)

有没有人提到他的最小和最大被逆转?因为那就是搞砸了他的代码。

修改

另一件搞乱他代码的事情:应该是Min +而不是1 +

答案 3 :(得分:1)

/**
 * @param bound1 an inclusive upper or lower bound
 * @param bound2 an inclusive lower or upper bound
 * @return a uniformly distributed pseudo-random number in the range.
 */
public static int randomInRange(int bound1, int bound2) {
    int min = Math.min(bound1, bound2);
    int max = Math.max(bound1, bound2);
    return min + (int)(Math.random() * (max - min + 1));
}

如果来电者可以保证bound1小于或等于bound2,则可以跳过确定最小和最大界限的步骤; e.g。

/**
 * @param min the inclusive lower bound
 * @param max the inclusive upper bound
 * @return a uniformly distributed pseudo-random number in the range.
 */
public static int randomInRange(int min, int max) {
    return min + (int)(Math.random() * (max - min + 1));
}

我没有在Android上对此进行过测试,但它应该适用于任何支持这些方法的Java或Java类平台,以符合标准(Sun)Java SE规范。

答案 4 :(得分:0)

您只需计算最小值和最大值之间的差值 例子-30和30 要得到: delta < - 绝对值(30 - (-30)) 然后找到0和delta之间的随机数。

有一篇与此相关的帖子。 然后将数字沿着数字线转换为常数min。

如果使用Random类: 1)被添加到Random.nextInt(someInt)的等式中,因为nextInt返回: someVal&lt; someInt所以你需要确保在函数输出中包含边界。

关于这段代码的一些事情让我很谨慎:

return min + 
(int)(Math.random() * (max - min + 1));
}

当施放四舍五入以进行注入时:

int someRandomDoubleRoundedToInteger = (int)(someDouble + 0.5)

有用吗?这对我有利,也许其他一些新手会觉得好笑,或者我犯了一个大错:

让我们选择1和10开头。 选择1到10之间的数字(包含)我选择10

Math.Random排除0和1.所以0.9999999999999999 *(10 - 1 + 1)= 9.999999999999999强制转换为int,所以在小数生成9之后将所有内容生成9我们加1到9返回10.(随机使用任何东西)从(.9到.999999999999)也会产生10个

我想从1到10之间选择1。

在这种情况下,随机方法将其最接近的值输出为零说: 0.00000000000000001 *(10 - 1 + 1)转换为int为0 0返回1 + 0。这样才有用。

嗯,好像有用。看起来像是一个非常非常非常小的偏见,因为我们永远不会将“0”作为一种可能性,但它应该是可以接受的。

该方法有效,如果随机生成器均匀覆盖0到1之间的整个区域。 在{0,1}间隔之间可以表示多少个不同的数字,它们是均匀间隔的吗?

我认为它有效。