【发布时间】:2012-04-28 15:53:09
【问题描述】:
我想生成一个短类型的随机数,就像有一个整数类型的函数称为 Random.nextInt(134116)。我怎样才能实现它?
【问题讨论】:
-
你需要负数吗?
-
不,我不需要只从 0 到最大短的负数
我想生成一个短类型的随机数,就像有一个整数类型的函数称为 Random.nextInt(134116)。我怎样才能实现它?
【问题讨论】:
short s = (short) Random.nextInt(); 怎么样?请注意,生成的分布可能有偏差。 Java 语言规范保证这不会导致异常,int 将被截断以适应short。
编辑
其实做个快速测试,得到的分布似乎也是均匀分布的。
【讨论】:
没有Random.nextShort()方法,所以你可以使用
short s = (short) Random.nextInt(Short.MAX_VALUE + 1);
+1 是因为该方法返回的数字不超过指定的数字(不包括)。见here
这将生成从 0 到 Short.MAX_VALUE 的数字(OP 未请求负数)
【讨论】:
short 值。
Java 短裤包含在 -32 768 → +32 767 区间内。
你为什么不做一个
Random.nextInt(65536) - 32768
并将结果转换为 short 变量?
【讨论】:
只需像这样生成一个 int:
short s = (short)Random.nextInt(Short.MAX_VALUE);
生成的int会在short的值空间中,所以可以在不丢失数据的情况下进行转换。
【讨论】:
可以产生所有可能的短值的最有效的解决方案是做任何一个。
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();
【讨论】: