在java中生成短随机数?

时间:2012-04-17 09:55:53

标签: java random short

我想生成一个类型为short的随机数,就像有一个名为Random.nextInt(134116)的整数类型的函数一样。我怎样才能实现它?

5 个答案:

答案 0 :(得分:22)

没有Random.nextShort()方法,因此您可以使用

short s = (short) Random.nextInt(Short.MAX_VALUE + 1);

+1是因为该方法返回的数字最多为指定的数字(不包括)。见here

这将生成从0到Short.MAX_VALUE的数字(OP不要求负数)

答案 1 :(得分:11)

Java短裤包含在-32 768→+32 767间隔中。

为什么不执行

Random.nextInt(65536) - 32768

并将结果转换为 short 变量?

答案 2 :(得分:9)

能够产生所有可能的短值的最有效的解决方案是做任何一种。

short s = (short) random.nextInt(1 << 16); // any short
short s = (short) random.nextInt(1 << 15); // any non-negative short

甚至更快

class MyRandom extends Random {
    public short nextShort() {
        return (short) next(16); // give me just 16 bits.
    }
    public short nextNonNegativeShort() {
        return (short) next(15); // give me just 15 bits.
    }
}

short s = myRandom.nextShort();

答案 3 :(得分:6)

short s = (short) Random.nextInt();怎么样?请注意,生成的分布可能存在偏差。 Java语言规范保证这不会导致异常,int将被截断以适应简短。

修改

实际上进行了快速测试,结果分布似乎也是均匀分布的。

答案 4 :(得分:3)

只需生成一个像:

的int
 short s = (short)Random.nextInt(Short.MAX_VALUE);

生成的int将位于short的值空间中,因此可以在不丢失数据的情况下进行投射。