我想生成一个随机数类型short,就像有一个名为Random.nextInt(134116)的整型函数一样。我怎样才能实现它?在java中产生短的随机数?
回答
没有Random.nextShort()
方法,所以你可以使用
short s = (short) Random.nextInt(Short.MAX_VALUE + 1);
+1是因为该方法返回一个数达到规定数量(不包括)。见here
从0到Short.MAX_VALUE包容这将生成的数字(负数不是由OP请求)
并且需要演员。 – 2012-04-17 10:00:58
谢谢@juergend,我已更新答案 – luketorjussen 2012-04-17 10:01:41
但是,如果您添加1,您将无法生成0? – Tudor 2012-04-17 10:02:20
short s = (short) Random.nextInt();
怎么样?请注意,由此产生的分配可能有偏差。 Java语言规范保证这不会导致一个异常,这个int将被截断以适合短小的内容。
编辑
实际上做一个快速的测试,得到的分布似乎是均匀分布了。
如果生成的数字大于短于? – luketorjussen 2012-04-17 10:02:09
只保留最后四位,但不会产生溢出。 – assylias 2012-04-17 10:03:18
但它会改变生成的随机数的微调均匀性吗? – 2012-04-17 10:13:19
爪哇短裤包括在-32 768→32 767间隔。
你为什么不执行
Random.nextInt(65536) - 32768
并将结果转换成短变量?
+1 - 我正准备写那个。 – Deco 2012-04-17 10:06:28
我想它,并为你写,所以你会延长键盘的使用寿命。 – 2012-04-17 10:12:47
只需产生像int:
short s = (short)Random.nextInt(Short.MAX_VALUE);
生成int
将在short
值空间,因此它可以在不丢失数据被铸造。
这将产生非负的短价值,除了Short.MAX_VALUE – 2012-04-17 10:14:21
可以产生所有可能的短值的最有效的解决方案是做。
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();
确实做得很好。 – assylias 2012-04-17 10:23:02
你需要负数? – luketorjussen 2012-04-17 10:06:11
no luke我不需要负数只能从0到最大短缺 – waqas 2012-04-17 10:11:53