我想生成一个短类型的随机数,就像有一个名为 Random.nextInt(134116) 的整数类型函数一样。我怎样才能实现它?
问问题
13005 次
5 回答
24
没有Random.nextShort()
方法,所以你可以使用
short s = (short) Random.nextInt(Short.MAX_VALUE + 1);
+1 是因为该方法返回一个不超过指定数字(不包括)的数字。看这里
这将生成从 0 到 Short.MAX_VALUE 的数字(OP 未请求负数)
于 2012-04-17T09:59:44.600 回答
13
可以产生所有可能的短值的最有效的解决方案是做任何一个。
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();
于 2012-04-17T10:18:37.147 回答
11
Java 短裤包含在 -32 768 → +32 767 区间内。
你为什么不做一个
Random.nextInt(65536) - 32768
并将结果转换为一个短变量?
于 2012-04-17T09:59:46.543 回答
6
怎么样short s = (short) Random.nextInt();
?请注意,生成的分布可能有偏差。Java 语言规范保证这不会导致异常,int 将被截断以适应short。
编辑
实际上做一个快速测试,得到的分布似乎也是均匀分布的。
于 2012-04-17T09:59:41.580 回答
3
只需生成一个 int,如:
short s = (short)Random.nextInt(Short.MAX_VALUE);
生成的int
将在 的值空间中short
,因此可以在不丢失数据的情况下进行转换。
于 2012-04-17T10:00:01.013 回答