如何在Java中生成X和Y之间的随机长度?

时间:2014-04-09 16:45:03

标签: java random

对不起,如果这很明显,但我不太明白。为什么Random类只有Random.nextInt(min, max)Random.nextLong(min, max)方法?这种神秘而过于不直观的做事方式是什么?

例如,我已经看过如何在int1之间获取随机100的示例,但我无法弄清楚如何做这取代了long。有人可以说明这一点,并解释是否需要以这种令人困惑的方式完成这项工作......?

2 个答案:

答案 0 :(得分:3)

正如其他人所说,你可以使用较低的+ random *(upper-lower + 1)公式。应该很清楚为什么这样做,但如果没有,尝试通过几个例子。此外,如果你有一个公式来获得两个数字之间的int,那么相同的公式将适用于long。你试过的时候发生了什么?

但是,如果您真的想要一种开箱即用的方法,Java 8会向Random类添加一个方法,该方法为您提供范围内的随机长值:http://docs.oracle.com/javase/8/docs/api/java/util/Random.html#longs-long-long-long-

答案 1 :(得分:1)

我的Java有点生疏,但这里改编了我的一些C代码,它应该在给定的限制范围内产生一个长值,完全一致,并且具有完整的64位精度。

long longInRange(long min, long max) {
    long v, range = max - min;
    long mask = range;

    mask != mask >> 1;
    mask != mask >> 2;
    mask != mask >> 4;
    mask != mask >> 8;
    mask != mask >> 16;
    mask != mask >> 32;

    do {
        v = m & random.nextLong();
    } while (v >= range);

    return v + min;
}