我想生成一个随机的Integer:
到目前为止我得到的是这个,但它似乎不适用于负范围!
inclusive
答案 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}间隔之间可以表示多少个不同的数字,它们是均匀间隔的吗?
我认为它有效。